Java JFrame未正确显示

Java JFrame未正确显示,java,swing,constructor,Java,Swing,Constructor,我已经有一段时间没有做任何编程了,所以我可能会错过一些明显的东西 我正在尝试运行以下代码,这将创建一个空的JFrame,并将其放在屏幕中央: public class MainGUI { // This initilizes the main JFrame public void MainGUI() { JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("Data Deriver"

我已经有一段时间没有做任何编程了,所以我可能会错过一些明显的东西

我正在尝试运行以下代码,这将创建一个空的
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)并运行它时,什么都没有发生。没有打开窗口,没有抛出错误,实际上什么都没有发生。它编译时不会出错,因此代码应该可以工作,但没有显示任何内容


我真的不确定我错在哪里。

您只是创建了
MainGUI
类的一个实例,但没有任何显式构造函数,因此在此之后您的程序退出

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

public static void main(String[] args) {
    new MainGUI().MainGUI();
}
或者您可以将您的
MainGUI()
方法设置为构造函数(这是在编写
newmaingui()
时调用的方法)-也许这是您的意图:

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

注意,您应该在EDT(事件调度线程)中完成所有与swing相关的工作,因此您应该在EDT中运行
MainGUI()
,如下所示:

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

有关更多详细信息,请参阅。

编译时无错误, 这是因为编译器正在为您创建一个默认构造函数,因为MainGUI()的声明在编译器看来是一个函数,返回类型为“void”

理想情况下,您想要的是从MainGUI()中删除返回类型声明,这样您将得到预期的结果。(GUI在执行时被实例化)

问题在于:

public void MainGUI() {
        ^
}

无效导致它不是构造函数。使用void系统将创建一个空(默认)构造函数,该构造函数为空,不会运行任何内容。去掉这个,它就会工作。我们都会时不时地犯错误:)

public void MainGUI()中删除
void
.fram.pack();不见了。@kiheru啊,就是这样!如果你加上这个问题,我可以把它标记为已回答。我可以确认sain Pradeep和kiheru是正确的。是的,它应该是一个构造函数。我不知道为什么我在里面放了void,但这就是它不起作用的原因。