【发布时间】:2014-07-04 21:59:07
【问题描述】:
我尝试在 Eclipse (OSX) 中执行以下代码:
public static void main(String[] args) {
JFrame frame = new JFrame("Test");
frame.setSize(new Dimension(400, 30));
frame.add(new JButton("hello"));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
框架未显示,但我收到以下控制台消息:
2014-05-16 14:45:35.230 java[8685:903] [Java CocoaComponent compatibility mode]: Enabled
2014-05-16 14:45:35.232 java[8685:903] [Java CocoaComponent compatibility mode]: Setting timeout for SWT to 0.100000
2014-05-16 14:45:35.546 java[8685:903] *** __NSAutoreleaseNoPool(): Object 0x100612800 of class NSConcreteMapTableValueEnumerator autoreleased with no pool in place - just leaking
2014-05-16 14:45:35.547 java[8685:903] *** __NSAutoreleaseNoPool(): Object 0x100613f40 of class __NSCFDate autoreleased with no pool in place - just leaking
2014-05-16 14:45:35.547 java[8685:903] *** __NSAutoreleaseNoPool(): Object 0x100616e60 of class NSCFTimer autoreleased with no pool in place - just leaking
2014-05-16 14:45:35.550 java[8685:903] *** __NSAutoreleaseNoPool(): Object 0x10061d7c0 of class __NSCFDate autoreleased with no pool in place - just leaking
2014-05-16 14:45:35.550 java[8685:903] *** __NSAutoreleaseNoPool(): Object 0x10061e610 of class NSCFTimer autoreleased with no pool in place - just leaking
同时,如果我将代码放入我的 Eclipse 项目之外的 java 文件中并通过命令行编译和运行它,一切都很好并且框架显示出来。 有人可以帮我解决问题吗?
更新
现在的代码如下所示:
import javax.swing.*;
public class TestFrame {
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
private void createAndShowGUI() {
JFrame frame = new JFrame("Test");
System.out.println(SwingUtilities.isEventDispatchThread());
frame.getContentPane().add(new JButton("hello"));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
});
}
}
这并不能解决问题(正如用户 DSquare 已经提到的)。我发现这似乎是那个特定的 Eclipse 项目的问题。如果我创建一个新的 Eclipse 项目(相同的 Eclipse),代码运行时不会出现错误消息,并且会显示框架。我仍然不知道哪个项目配置可能导致它。我的类路径中没有 swt.jar(尽管插件依赖项中有 org.eclipse.swt 和 org.eclipse.swt.cocoa.macosx.x86_64)。
【问题讨论】:
-
如果您解释了为什么您可以通过快速搜索找到的多种解决方案不起作用,那将会很有用。您是如何这么快(不到 5 分钟)得出这个结论的,这样您的问题的核心就更清楚了,我们可以帮助解决它,而不是因为解决方案不成功而浪费时间。
-
我找不到“多种解决方案”(我花了超过 5 分钟寻找它)。您提到我的 OSX 配置错误。如果你能帮我弄清楚我的 OSX 出了什么问题,那就太好了。
-
另外,由于这与线程相关,请确保正确了解我提到的 EDT。您应该将
invokeLater放在您的主目录中并从那里开始工作。 -
我已更改代码(请参阅更新)。除此之外,我还无法弄清楚哪些项目设置错误并导致此错误。