在我的java swing应用程序中,我有一个Jframe和Jlabel来显示当前时间。 这里使用一个线程来显示jlablel中添加到frame中的时间。我怀疑当我处理jframe时,无论是运行还是停止,都会发生什么。
答案 0 :(得分:2)
如果您未通过调用yourThread.setDaemon(true)
将线程标记为守护程序,即使应用程序中的主线程已完成,它也将继续运行。请记住,您必须在开始主题之前调用setDaemon
。
有关详细信息,请参阅我之前的answer一些问题。
我认为,在您的情况下,正确的方法是保持一个“停止”标志,由您的计时器线程监视。读取此标志时,定时器线程应退出为'false'。您可以向您的jframe添加一个WindowListener,并在关闭窗口的事件中将'stop'标志设置为 true
以下是我建议的示例代码:
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
public class JFrameTest {
public static void main(String[] args) {
final Timer t = new Timer();
t.start();
JFrame jf = new JFrame("GOPI");
jf.setVisible(true);
jf.setSize(100, 100);
jf.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
t.stopTimer();
}
});
System.out.println("JFrameTest.main() DONE");
}
}
class Timer extends Thread {
boolean stop = false;
@Override
public void run() {
for (int i = 0; i < 50; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (stop)
break;
System.out.println("Counting :" + i);
}
System.out.println("Timer exit");
}
public void stopTimer() {
stop = true;
}
}
答案 1 :(得分:0)
你的线程将继续运行。
您需要按照Gopi的建议执行操作,或者在JFrame的近距离操作中使用System.exit(0)
。
注意:我假设您的应用程序需要在此框架关闭时结束。