好的,所以我已经开始使用我的菜单系统并使用JFrame。一切似乎工作得很好,直到我点击启动画布的按钮。现在画布所做的是初始化扩展Canvas的JFrame,因此我无法使用线程。一旦帧启动并运行,它将调用一个有一段时间为真的方法{}之后我无法关闭帧。在使用static void main运行canvas应用程序之前,这从来就不是问题。如何解决这个新JFrame问题没有关闭?
答案 0 :(得分:5)
如何解决新JFrame未关闭的问题?
不要阻止EDT(事件调度线程) - 当发生这种情况时,GUI将“冻结”。不要创建无限循环,而是为长时间运行的任务实现SwingWorker
。有关详细信息,请参阅Concurrency in Swing。
答案 1 :(得分:0)
1。在使用GUI应用程序时,这是一个经验法则,始终保持UI工作在UI线程上,非UI工作在非UI线程上。< /强>
2。第二次不要混淆SWING
和AWT
。
3。 Java Gui中的 main()方法不长期,在事件调度程序线程(EDT)中安排工作后 main()
方法退出。现在它只是EDT处理GUI的责任。
4. 所以永远不要将非UI流程密集型工作与EDT混在一起。
使用EDT处理GUI。
<强>例如强>
public static void main(String[] args){
EventQueue.invokeLater(new Runnable(){
myframe.setVisible(true);
});
}