标签: java-7

在JTextPane中包装长单词(Java 7)

在最多6个Java的所有版本中,放置在JScrollPane中的JTextPane的默认行为是:如果可能,在字边界处换行.如果没有,那么无论如何都要包装它们.

在JDK 7中,默认行为似乎是:如果可能,在字边界处换行.如果没有,只需扩展JTextPane的宽度(永远不要换长字).

这很容易重现,这是一个SSCCE:


public class WrappingTest extends JFrame
{

    public static void main ( String[] args )
    {
        new WrappingTest(); 
    }

    public WrappingTest ()
    {
        setSize(200,200);
        getContentPane().setLayout(new BorderLayout());
        JTextPane jtp = new JTextPane();
        JScrollPane jsp = new JScrollPane(jtp);
        jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        getContentPane().add(jsp,BorderLayout.CENTER);
        setVisible(true);
    }

}
Run Code Online (Sandbox Code Playgroud)

只需在JDK 6和JDK 7中运行它,写一些小字,然后写一个长字,你就会看到差异.

我的问题很简单...... JDK 7中的新默认行为完全混淆了我的程序(他们应该更加小心Oracle更改这种默认值......它们似乎并不重要但是当你使用JTextPane显示时通常包含非常长的字母串的数据,它们并不是那么不重要 - 实际上我要提交错误报告,但是我想在/如果它们不解决它的情况下有一个解决方法).有什么方法可以回到以前的行为?

请注意,我已经检查了相关问题的答案.如何在JTextPane中实现自动换行,以及如何使其包装不带空格的字符串?但是它没有回答这个问题 - 它提供了一种使JTextPane包装完全不考虑空白的方法,但对我来说,如果可能的话,所需的行为是在空白处分割行,如果不可能的话,在其他地方(如以前的Java)版本).

java swing jtextpane word-wrap java-7

16
推荐指数
2
解决办法
5063
查看次数

Java 1.6和1.7 jarsigner有什么区别

注意,您无法使用Java 1.7 jarsigner签署Android APK.所以我想知道为什么这是1.6和1.7签名者有什么区别?

jarsigner java-6 java-7

16
推荐指数
2
解决办法
8828
查看次数

Netbeans Profiler:永远连接到目标虚拟机

我正在尝试将Netbeans探查器附加到我的Java项目中,但它仍然受到了阻碍Connecting to the target vm.

我发现了这个旧的错误报告,但已经修复了.在Windows 7上,我的版本是7.1.2,Java 1.7.0_04.

我试图禁用防火墙并以管理员身份启动Netbeans但仍然遇到了同样的问题.

有点奇怪的是校准工作正常.

我觉得这是Java 7的一个问题.因为如果我查看profiler\lib\deployed那里没有jdk17文件夹.只有jdk16和jdk15.

有什么想法吗?

java profiler netbeans java-7

16
推荐指数
1
解决办法
5664
查看次数

Java 1.7 varargs函数报告为未经检查的警告

我们使用了一些varargs函数,当我们转向java 1.7时,我们得到了一个奇怪的未经检查的警告.

功能在接口ICache中添加

public interface ICache<O> {
    void add(Object source, O... objects);
}
Run Code Online (Sandbox Code Playgroud)

在界面中报告错误.

ICache.java:18: warning: [unchecked] Possible heap pollution from parameterized vararg type O
    void add(Object source, O... objects);
  where O is a type-variable:
    O extends Object declared in interface ICache
1 warning
Run Code Online (Sandbox Code Playgroud)

O扩展了Object,作为其通用缓存类.

我阅读了xlint警告并且我们在未经检查的情况下编译,但是http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html#xlintwarnings似乎暗示这个错误应该是[varargs]类型不是未经检查的类型.

我错过了什么吗?

java javac variadic-functions java-7 heap-pollution

16
推荐指数
1
解决办法
6249
查看次数

如何在Java 7中用nio替换File.listFiles(FileFilter过滤器)?

我有一些用Java 6编写的文件I/0遍历代码,试图将它移动到Java 7中的新I/O但我找不到任何替代这种东西.

File[] files = dir.listFiles(AudioFileFilter.getInstance());
Run Code Online (Sandbox Code Playgroud)

即,没有办法只过滤路径文件,它返回文件列表,所以我必须将每个文件转换为路径(file.toPath),如果我想限制在它调用的方法中使用File,这似乎相当费力.

我确实看过FileVisitor,但这似乎不允许你控制树的遍历方式,所以我认为它不会对我有用.

那么Java 7中的Path for File有多少替代品呢?

java file path java-7 nio2

16
推荐指数
1
解决办法
9441
查看次数

如何将Java JDK静默安装到Windows上的特定目录中

在我的开发机器上,我总是需要安装Java 6 和 Java 7,我必须在32位和64位版本中安装每个JDK,以进行测试.由于Java更新的频率似乎变得越来越荒谬(现在每周两次?)每次更新都要求我取消然后重新安装4个 JDK.所以这真的很烦人,因此我想编写整个过程的脚本.

我的问题是,默认情况下,每个JDK版本都安装到包含update-number的目录路径中(默认值:"C:\ Program Files\Java\jdk1.6.0_ <update-nr> \").为了避免我不得不调整大量的构建脚本,我总是手动从安装路径中删除尾随的"_ <update-nr>"并始终安装到相同的"C:\ Program Files\Java\jdk1.6.0"或"C:\ Program Files\Java\jdk1.7.0",分别为64位版本和C:\ Program Files(x86)\ Java\jdk1.6.0"或"C:\ Program Files(x86)\Java\jdk1.7.0",对于32位版本,分别为.

我发现了,如何为JRE安装程序(即Java运行时)指定安装目录:

<jre-installfile>.exe [/s] [INSTALLDIR=<drive>:\<JRE_install_path>] 
    [STATIC=1] [WEB_JAVA=0/1] [WEB_JAVA_SECURITY_LEVEL=VH/H/M/L]
Run Code Online (Sandbox Code Playgroud)

我还没有找到类似的描述如何指定JDK安装程序的安装目录.

有谁知道是否以及如何指定JDK安装程序的安装路径,以便可以将静默JDK安装指向特定的安装目录?

java silent-installer java-6 java-7

16
推荐指数
2
解决办法
3万
查看次数

java.nio.file:Path接口实际在哪里实现?

最近我使用Java 7中引入的java.nio.file包进行了一些编码,并看到了一个使用Path的示例:

Path path = Paths.get("C:\\Users");
Run Code Online (Sandbox Code Playgroud)

鉴于Path是一个接口,我对如何引用它感到困惑,但经过一些研究后我发现允许对接口的引用,但它必须指向实现接口的类.从这看起来我查看了Paths类,发现它没有实现Path.查看源代码的实际方法Paths.get方法如下:

public static Path get(String first, String... more) {
    return FileSystems.getDefault().getPath(first, more);
}    
Run Code Online (Sandbox Code Playgroud)

该方法首先使用我认为称为静态工厂方法的方式返回FileSystem类型的对象(我认为是抽象类),但FileSystem也没有实现该接口.

我的问题是有没有人知道/能够解释Path接口实际实现的位置,因为我似乎无法找到它发生的位置.

java java-7 java.nio.file

16
推荐指数
1
解决办法
7590
查看次数

如何在导入时阻止Eclipse提供已弃用的类?

我有一个使用Eclipse的反复出现的问题.请考虑以下示例:

使用已弃用的类组织导入

你可以看到我按了Ctrl+ Shift+ O.我可以从已弃用和未弃用的注释中进行选择.我的问题是我经常提供几十个类,其中一半被弃用(一个完美的例子是JUnit Assert类).

我的问题是如何在组织导入时使Eclipse忽略所有已弃用的类?

java eclipse import java-7 eclipse-kepler

16
推荐指数
1
解决办法
1069
查看次数

javafx 8兼容性问题 - FXML静态字段

我设计了一个javkx应用程序在jdk 7中工作正常.当我尝试在java 8中运行它时,我得到以下异常:

javafx.fxml.LoadException: 
at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2617)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2595)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3230)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3191)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3164)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3140)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3132)


Exception in thread "JavaFX Application Thread" java.lang.NullPointerException: Root cannot be null
    at javafx.scene.Scene.<init>(Scene.java:364)
    at javafx.scene.Scene.<init>(Scene.java:232)
        at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.event.Event.fireEvent(Event.java:204)
    at javafx.concurrent.EventHelper.fireEvent(EventHelper.java:219)
    at javafx.concurrent.Task.fireEvent(Task.java:1357)
    at javafx.concurrent.Task.setState(Task.java:720)
    at javafx.concurrent.Task$TaskCallable$2.run(Task.java:1438)
    at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:301)
    at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:298)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl$6.run(PlatformImpl.java:298)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39)
    at com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112)
    at java.lang.Thread.run(Thread.java:744)
Run Code Online (Sandbox Code Playgroud)

我发现原因是在控制器类的initialize方法中我无法在任何静态组件中使用内置方法.(例如:staticMyTextField.setText()导致java …

java java-7 java-8 javafx-2 javafx-8

16
推荐指数
1
解决办法
9447
查看次数

数字之间的下划线

错误地添加下划线如下:

int i = 1_5;
Run Code Online (Sandbox Code Playgroud)

但没有编译错误.为什么会这样?输出就像是忽略下划线一样.那为什么Java中有这样的功能?

java int java-7

16
推荐指数
2
解决办法
1248
查看次数