将JFrame设置为可见时出现JFace错误:Cocoa AWT:在AppKit线程0上运行,但不是预期的



我正试图为一个简单的应用程序编写我的第一个JFrame。问题是,一旦我取消注释setVisible(true);我获得以下错误消息:

Cocoa AWT:在不期望的情况下在AppKit线程0上运行

配置:在macOS10.10(Yosemite)和Java上运行eclipse是最新的。

这是代码:

package gui;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class MainFrame extends JFrame {
    private JLabel appTitle;
    public MainFrame(){
        super("Tabum by Team Alpha");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(200,500);
        setLayout(new BorderLayout());
        setVisible(true);
    }
}

我从未使用过您的工具,但我猜问题是所有GUI代码都应该在事件调度线程(EDT)上执行,而您的代码却没有这样做。

您可以通过将代码包装在SwingUtilities.invokeLater(…):中来实现这一点

EventQueue.invokeLater(new Runnable()
{
    public void run()
    {
        // add your code here
    }
});

有关更多信息,请阅读Swing教程中关于并发性的部分。

我无法让解决方案在Mac上使用Eclipse。

然而,当我在IntelliJ IDEA中加载完全相同的解决方案时,它成功了

我会将其归类为Eclipse错误。供参考:

  • 我使用的是当前JDK 1.8.0_31
  • 我使用的是Eclipse开普勒Service Release 2(20140224-627)
  • 我在Mac OS X Yosemite上

如果它对你有帮助,或者你有更好的解决方案,请告诉我。

最新更新