我暂时没有做任何编程,所以我可能会遗漏一些明显的东西。
我正在尝试运行以下代码,该代码应创建一个空的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)并运行它时,没有任何反应。没有窗户打开,没有错误被抛出,字面上没有任何反应。它编译时没有错误,因此代码应该可以工作,但没有显示任何内容。
我真的不确定自己错在哪里。
答案 0 :(得分:2)
您只是在创建MainGUI
类的实例,但是您没有任何显式构造函数,因此您的程序退出。
您必须调用创建并显示框架的MainGUI()
方法:
public static void main(String[] args) {
new MainGUI().MainGUI();
}
或者您可以将MainGUI()
方法变为构造函数(这是您在编写new MainGUI()
时调用的内容) - 也许这是您的意图:
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();
}
});
}
有关详细信息,请参阅Initial Threads。
答案 1 :(得分:0)
编译时没有错误, 这是因为编译器正在为您创建一个默认构造函数,因为您的MainGUI()声明在编译器中显示为一个函数,并带有'void'返回类型。
你想要的(理想情况下)是从MainGUI()中删除返回类型声明,你会得到你期望的。 (在执行时实例化GUI)
答案 2 :(得分:0)
问题在于:
public void MainGUI() {
^
}
void 导致它不是构造函数。使用 void ,系统正在创建一个空的(默认)构造函数,该构造函数为空,不会运行任何内容。删除它,它会工作。我们都时不时犯错误:))