JFrame 显示不正确

JFrame not displaying properly

我已经有一段时间没有编写任何程序了,所以我可能遗漏了一些明显的东西。

我正在尝试 运行 以下代码,它应该创建一个空的 JFrame 并将其放在屏幕中央:

public class MainGUI
{
// This initilizes the main JFrame
  public void MainGUI()
  {
    JFrame.setDefaultLookAndFeelDecorated(true);
    JFrame frame = new JFrame("Data Deriver");
    //frame.setContentPane(makeGUI(frame));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300,180);
    frame.setLocationRelativeTo(null);
    frame.setResizable(true);
    frame.setVisible(true);
  }
  public static void main(String[] args)
  {
    new MainGUI();
  }
}

但是,当我编译此代码(使用 JDK 8.0_45)和 运行 时,没有任何反应。没有 windows 打开,没有错误被抛出,实际上什么都没有发生。它编译没有错误,所以代码应该可以工作,但没有显示任何内容。

我真的不知道我哪里错了。

您只是在创建 MainGUI class 的一个实例,但是您没有任何显式构造函数,所以之后您的程序就会退出。

您必须调用创建和显示框架的 MainGUI() 方法:

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

或者您可以将 MainGUI() 方法设为 constructor(当您编写 new MainGUI() 时会调用它)- 也许这就是您的意图:

public MainGUI() {
    JFrame.setDefaultLookAndFeelDecorated(true);
    // ...rest of your code
}

注:

请注意,您应该在 EDT(事件调度线程)中完成所有与摆动相关的工作,因此您应该在 EDT 中 运行 MainGUI() 像这样:

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            new MainGUI();
        }
    });
}

有关详细信息,请参阅 Initial Threads

编译时没有错误, 这是因为编译器正在为您创建一个默认构造函数,因为您对 MainGUI() 的声明在编译器看来是一个函数,具有 'void' return 类型。

您想要的(理想情况下)是从 MainGUI() 中删除 return 类型声明,您将得到您期望的结果。 (执行时实例化的 GUI)

问题是这样的:

public void MainGUI() {
        ^
}

void 导致它不是构造函数。使用 void 系统正在创建一个空白(默认)构造函数,它是空的,不会 运行 任何东西。删除它,它将起作用。我们都会不时犯错误:)