【发布时间】:2012-08-26 14:17:29
【问题描述】:
在我的项目中,我有一些课程。一个创建 gui 的类,JFrame 除外。 我将在我的 Main 类中创建 JFrame,例如:
import javax.swing.*;
import java.awt.*;
public class KodeHusker {
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
JFrame f = new JFrame();
f.setLayout(new FlowLayout());
f.add(new JLabel("test"));
f.add(new GUI().viewProgram());//it works fine, when i remove this
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
});
}
}
gui 类是我创建所有 gui 的地方,viewProgram 方法声明为:
public JPanel viewProgram(){}
返回一个 JPanel。
正如代码中的注释所说,当我删除该行时,它一切正常,但是当我拥有它时,JFrame 永远不会显示,尽管没有任何异常。关闭程序的快捷方式也不起作用。
有人知道我做错了什么吗? 感谢您的建议。
【问题讨论】:
-
您可能向我们展示了错误的代码,因为我敢打赌问题出在 viewProgram() 或您的 GUI 的构造函数中。我怀疑你有一个无限循环在那里进行,或者以其他方式踩踏 Swing 事件线程,也称为 EDT 或事件调度线程。顺便说一句,我喜欢你试图避免不必要地扩展 Swing GUI 组件。这是一件值得努力的好事情。
-
检查空异常处理程序。
-
@HovercraftFullOfEels,是的,你是对的。仔细一看,在viewProgram()中发现了一个没有结束的while语句。
-
啊好。即使是盲松鼠也会时不时地找到一颗坚果。很高兴你把它修好了!
标签: java swing jframe return jpanel