以下是我的申请图片:
按下新按钮时,将显示问题并启动计时器。
但是在按下“新建”按钮后,既没有计时器运行也没有显示文本,默认关闭操作不起作用。当我注释掉checkTimer()然后它工作正常。
以下是代码:
foreach ($content['posts']->data as $posts) {
echo "<p>posts id: $posts->id</p>";
echo "<p>posts message: $posts->message</p>";
}
请指导我为什么不能正常工作。
答案 0 :(得分:3)
通过调用sleep()来阻止checkTimer()中的EventDispatcherThread。实际上,它可以防止重新绘制UI并处理所有事件。
而是启动一个新的单独线程并调用UI更改,例如。
timerField1.setText(Integer.toString(min));
timerField2.setText(Integer.toString(sec));
在SwingUtilities.invokeAndWait()块中(也可以尝试invokeLater())
答案 1 :(得分:2)
Thread.sleep(1000);
在Event Dispatch Thread (EDT)
上执行代码时,请勿使用Thead.sleep。这将导致GUI冻结并阻止GUI响应事件。
按下新按钮时,将显示问题并启动计时器。
然后你应该使用Swing Timer
。您可以将Timer设置为每秒触发一次,以便更新时间。然后,如果发射300次,你将停止计时器,游戏将结束。
阅读How to Use Swing Timers上Swing教程中的部分,了解更多信息和工作示例。
答案 2 :(得分:-1)
你的问题是你checkTimer()它不是一个线程,然后如果按下New按钮再次调用checkTimer()但是,另一个实例正在运行。您需要使用Swing Timer作为您的时钟,然后当您按下New按钮时可以将其停止。