当从Eclipse运行时,Java JFrame窗口未显示

13

一个非常简单的问题。我试图从Eclipse运行一个非常简单的演示,创建并显示一个窗口框架,但什么也没发生。没有错误,没有窗口,代码已经运行完成。

我添加了断点,并确保代码按预期运行。这段代码直接来自于Java教程(FrameDemo),我只是将包重命名以适应我放置它的位置(此包中的其他代码都运行良好):

package ui;

import java.awt.*;
import javax.swing.*;

/* FrameDemo.java requires no other files. */
public class FrameDemo {
    /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("FrameDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JLabel emptyLabel = new JLabel("");
        emptyLabel.setPreferredSize(new Dimension(175, 100));
        frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

我的安装配置(Kepler SR2):

  • eclipse.buildId=4.3.2.M20140221-1700
  • java.version=1.8.0_05
  • java.vendor=Oracle Corporation
  • BootLoader常量:OS=macosx,ARCH=x86_64,WS=cocoa,NL=en_US
  • 框架参数:-product org.eclipse.epp.package.java.product -keyring /Users/steve/.eclipse_keyring -showlocation
  • 命令行参数:-os macosx -ws cocoa -arch x86_64 -product org.eclipse.epp.package.java.product -keyring /Users/steve/.eclipse_keyring -showlocation

我还检查了Configuration->错误日志; 仍然没有任何错误。我尝试过其他类似的演示文稿,结果相同。

如果有帮助,将不胜感激,因为我已经被卡在这个问题上一天了。


你尝试过使用不同的IDE或从终端运行它吗? - Dioxin
@Vince - 将它导出为jar文件,然后从终端运行它,窗口就会弹出。 - user4061565
@Hovercraft - 我尝试重新启动Eclipse,但是仍然没有显示任何东西。 - user4061565
1
不,不是重新启动,而是重新安装。从头开始。 - Hovercraft Full Of Eels
1
@user4061565:不,我不建议你这样做,因为这个网站主要是回答这样的问题。相反,尝试写一个干净的答案给自己的问题,发布它,然后在时间限制允许后接受它。这是我们想要和需要的类型(我认为),因为你这样做很可能会帮助未来的用户,这就是重点。 - Hovercraft Full Of Eels
显示剩余4条评论
2个回答

10

事实证明我遇到了一个库的问题。我已经导入了jfreechart中.lib目录中的所有jar文件。实际上只需要两个,而一些不必要的标记为swt和experimental的文件是多余的。一旦我删除了所有不需要的文件,进行了清理和重建,一切都正常工作了。

奇怪的是,改变包含冲突的jfreechart库(包括那些多余的jar)的顺序并没有帮助,必须删除额外的jar文件。

显然这不是jfreechart问题,而是我的库导入问题。如果你遇到这个问题,我建议你尝试删除可能存在冲突的一些库,然后再次清理、构建和运行。

感谢Hovercraft Full Of Eels和其他回答者帮助我解决问题。


有趣!我遇到了同样的问题。从来没有想过导入比需要更多的jar可能会导致这种情况。无论如何,很好的发现! - One Two Three
非常正确。我也遇到了类似的问题。我的应用程序无法启动,运行时什么都没有发生。从引用库中删除了jfreechart-1.0.19-swt.jar后,一切都正常工作了!!! - Rahul Sawant
天啊 - 我遇到了同样的问题,还以为自己疯了。移除 SWT 上的“外部 jar 依赖项”,突然间 Swing 窗口就出现了... - slott

3

在 macOS 中使用 Eclipse 和 swt.jar 会出现这个问题。

原来,在 macOS 上,如果 classpath 中包含 swt.jar,Eclipse 在启动 GUI 应用程序时会添加一个特殊参数 -XstartOnFirstThread。因此,将 swt.jar 从外部库(用于构建 classpath)中移除即可解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接