我有一个JFrame构造函数,从Main.java调用(JFrame的类是Page1.java)
movieSelection p1 = new movieSelection();
this.add(p1);
this.pack();
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
movieChoose是一个扩展JPanel的类,是Page1的子类。它由一个构造函数和一个带有ActionListener的JButton组成,该构造函数添加了一个JTextField。
最终结果如下
在Page1.java的构造函数结束时,如果我添加while(true) {};
或仅while(true);
,最终结果为:以及大量延迟。
根据活动监测,这是该计划占用多少空间:
20个线程
261个港口
近200%的CPU
这个空循环如何循环:a)弄清楚已添加到框架中的JPanel,以及b)产生大量延迟?
为什么一个什么都不做的循环会做什么?
答案 0 :(得分:2)
答案 1 :(得分:0)
这不仅仅是无所事事。它在循环。当你说“很多滞后”时,我认为你的意思是应用程序完全挂起?如果它在遇到while()时发生任何事情,我会感到惊讶。
答案 2 :(得分:0)
因为该循环永远不会停止检查值是否为真... 这就是为什么它被称为无限循环。每个循环用于检查它是否应该停止循环。
答案 3 :(得分:0)
一个空的(无限的)循环实际上做了很多 - 就像一张纸告诉你翻页,而背面也是这样。
所以永远不要用任何计算机语言进行空循环。
你能做的就像是
while (true) {
Thread.sleep(100);
}
那更好,因为现在你让你的主线程运行但告诉JVM“好吧,我不打算做100毫秒的事情,所以如果你需要做其他事情。”
但是你仍然错过了一件重要的事情 - 一些退出条件。
为什么你需要一个无限循环呢?在普通的swing应用程序中,不需要保持主线程运行,JFrame打开就足够了。您可以在http://docs.oracle.com/javase/tutorial/uiswing/components/frame.html
看到一些示例代码答案 4 :(得分:0)
滞后很可能是因为理论上循环执行无限次。也许你可以尝试暂停线程,这给了CPU一些时间来呼吸:
Thread.sleep(5);
答案 5 :(得分:-1)
很老,所以可能不读,但谢谢!回答了一个最棘手的问题。 (之前我正在使用双核处理器,现在切换到单个,我的空{}语句刚刚停止工作!)