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,但这就是它不起作用的原因。