【发布时间】:2021-06-03 11:47:28
【问题描述】:
我正在尝试制作一个简单的 Java GUI 计时器,但每当我按下开始按钮时,GUI 就会冻结并且不允许我点击停止按钮,但程序会继续在终端上完美运行。
这是我的开始按钮的代码:
startButton = new JButton();
startButton.setText("START");
startButton.setFont(new Font("RuneScape UF", Font.PLAIN, 16));
startButton.setFocusable(false);
startButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == startButton) {
System.out.println("Start button pressed!");
isRunning = true;
System.out.println(isRunning);
long startTime = System.currentTimeMillis();
while (isRunning) {
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException interruptedException) {
interruptedException.printStackTrace();
}
long elapsedTime = System.currentTimeMillis() - startTime;
long elapsedSeconds = elapsedTime / 1000;
if (elapsedSeconds == 60) {
elapsedSeconds = 0;
startTime = System.currentTimeMillis();
}
if ((elapsedSeconds % 60) == 0) {
minutesDisplay++;
}
if ((minutesDisplay % 60) == 0 && stupidFix > 0) {
stupidFix++;
hoursDisplay++;
}
//System.out.println(elapsedSeconds);
String h = String.format("%02d", hoursDisplay);
String m = String.format("%02d", minutesDisplay);
String s = String.format("%02d", elapsedSeconds);
timePassed.setText(h + ":" + m + ":" + s);
System.out.println(h + ":" + m + ":" + s);
}
}
}
});
【问题讨论】:
-
那是因为 UI 线程卡在你的
while (isRunning)循环中,你必须在单独的线程中执行该代码
标签: java swing user-interface