gpt4 book ai didi

java swing线程问题

转载 作者:行者123 更新时间:2023-11-30 05:10:04 25 4
gpt4 key购买 nike

在我的 java swing 应用程序中,有一个 Jframe 和 Jlabel 用于显示当前时间。这里使用一个线程在 jlabel 中显示时间,并将其添加到框架中。我的疑问是,当我处置 jframe 时,线程会发生什么情况,无论其正在运行还是已停止。

最佳答案

如果您没有通过调用 yourThread.setDaemon(true) 将线程标记为守护进程,即使应用程序中的主线程已完成,它也会继续运行。请记住,在启动线程之前,您必须调用 setDaemon

引用我的answer有关详细信息,请参阅之前的一些问题。

我认为,在您的情况下,正确的方法是维护一个由计时器线程监视的“停止”标志。计时器线程应在将此标志读取为“假”时退出。您可以向 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;
}
}

关于java swing线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3734323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com