在最多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 1.7 jarsigner签署Android APK.所以我想知道为什么这是1.6和1.7签名者有什么区别?
我正在尝试将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.
有什么想法吗?
我们使用了一些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 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 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 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接口实际实现的位置,因为我似乎无法找到它发生的位置.
我有一个使用Eclipse的反复出现的问题.请考虑以下示例:

你可以看到我按了Ctrl+ Shift+ O.我可以从已弃用和未弃用的注释中进行选择.我的问题是我经常提供几十个类,其中一半被弃用(一个完美的例子是JUnit Assert类).
我的问题是如何在组织导入时使Eclipse忽略所有已弃用的类?
我设计了一个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 …
错误地添加下划线如下:
int i = 1_5;
Run Code Online (Sandbox Code Playgroud)
但没有编译错误.为什么会这样?输出就像是忽略下划线一样.那为什么Java中有这样的功能?