我的应用程序正在发生什么是有道理的,但我不知道如何解决。这是我的应用程序的简要说明:计时器窗口应显示在屏幕的右下角,并显示实时时间。一个小时后,它应该执行一些操作(我还没有决定要执行的操作)。我面临的问题是,在
Timer.java中, 当我刷新实时计时器的秒数时,我正在使用线程睡眠,这阻止了我的所有应用程序继续html" target="_blank">执行,因此没有窗口显示。
这是带有一些注释的代码:
TimerFrame.java :应用程序的主框架
import java.awt.BorderLayout;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import javax.swing.JFrame;
public class TimerFrame extends JFrame{
public TimerFrame(String title) {
// TItle and Layout
super(title);
setLayout(new BorderLayout());
// Create the time panel and add it
final TimerPanel tp = new TimerPanel();
add(tp, BorderLayout.CENTER);
// Timer is a class I've created, and it fires an event every second
Timer time = new Timer();
time.addTimeListener(new TimeListener() {
public void refresh(String time) {
tp.setText(time);
}
});
// Configuration
setSize(300,300);
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice defaultScreen = ge.getDefaultScreenDevice();
Rectangle rect = defaultScreen.getDefaultConfiguration().getBounds();
int x = (int) rect.getMaxX() - getWidth();
int y = (int) rect.getMaxY() - getHeight();
this.setLocation(x, y);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
TimePanel.java :应该在屏幕上显示实时时间的面板
import java.awt.Font;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class TimerPanel extends JPanel{
private JLabel label;
public TimerPanel() {
label = new JLabel("Start Time");
label.setFont(new Font("Arial",Font.BOLD,40));
add(label);
}
public void setText(String text){
label.setText(text);
}
}
TimerListener.java :侦听器接口
public interface TimeListener {
public void refresh(String time);
}
Timer.java :提供实时时间,并每秒触发一次名为refresh的事件。
在这种情况下,thread.sleep()导致我的应用程序停止执行。
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Timer {
private TimeListener sl = null;
public Timer() {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
boolean start = true;
int StartHour = 0;
while(true){
try {
// Get current time
Calendar cal = Calendar.getInstance();
// Initialize Start hour
if(start){
StartHour = getHour(cal, sdf);
start = false;
}
// Fire event
if(sl != null)
sl.refresh(sdf.format(cal.getTime()));
// If one hour
if(getHour(cal, sdf) - StartHour == 1){
// Code goes here
// Reset start
start = true;
}
// Delay 1 Sec
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* Get Current Hour
* @param cal Calentder
* @param sdf Date format
* @return Current Hour
*/
public static int getHour(Calendar cal, SimpleDateFormat sdf){
sdf.applyPattern("HH");
int hour = Integer.parseInt(sdf.format(cal.getTime()));
sdf.applyPattern("HH:mm:ss");
return hour;
}
/**
* Add Time Listener
* @param sl TimeListener
*/
public void addTimeListener(TimeListener sl){
this.sl = sl;
}
}
有谁知道如何让我的应用程序在具有无限运行的thread.sleep()的同时执行?谢谢 :)
有谁知道如何在有线程的情况下使我的应用程序执行。sleep()
不要使用Thread.sleep()。
而是使用Swing计时器。您将计时器设置为每秒触发一次,以便可以更新组件。
我使用 C 和 POSIX 线程创建了一个多线程应用程序。我现在应该阻塞一个线程(主线程),直到设置了布尔标志(变为真)。 我找到了两种方法来完成这件事。 > 在没有睡眠的情况下旋转。 在睡眠中旋转循环。 如果我应该遵循第一种方式,为什么有些人编写代码遵循第二种方式?如果应该使用第二种方法,为什么要让当前线程Hibernate呢?这种方式的缺点是什么?
问题内容: 我的Android应用程序中的Java线程有问题。我的嵌套线程阻塞了我的UI,我该如何解决? MyClass.java 这就是我的运行方式: 你可以帮帮我吗?我真的卡住了;) 问题答案: 我的嵌套线程阻止了我的UI 您需要使用而不是。也就是说,更换 与 (这只是一个普通方法。实际上是产生一个新线程并随后运行的方法)
问题内容: 我正在使用JLabel创建动画, 我有一个按钮可以更新标签 但是,我不知道如何等待(例如1000毫秒)直到下一次更改。当我添加此: 到我的ActionListener中: 它不起作用。它停了片刻,我看不到第一帧和最后一帧之间的变化。是否可以等待1000毫秒而不停止程序?当我删除while循环并尝试部分时,单击我的按钮,它的变化非常好… 我怎样才能做到这一点? 问题答案: 在 主 线程中
问题内容: 首先,我想说的是,我知道这个方法是错误的,因此,我出于好奇而问这个问题。可以说我有一个这样的秋千应用程序: 基本上,当我单击按钮时,我期望图像显示,然后GUI冻结2秒钟,然后我期望图像显示。但是发生的是:我单击按钮,GUI冻结2秒钟并显示。没有之前。但是让我感到困惑的是当我把它们和。因此,当我单击按钮时,它会打印“郁金香画”,并在2秒钟后打印“考拉画”。有人可以告诉我这是怎么回事吗?问
我正在研究计算机硬件,在那里我们了解到使用硬件计时器比软件延迟获得更准确的结果。我已经在汇编中编写了1毫秒的软件延迟,我可以启动一个进程,使用这个延迟每毫秒重复一次,并使用计数器每100毫秒做一些其他事情,这种技术不如使用我现在要使用的硬件内置的硬件计时器准确。 所以我想知道Java内置的计时有多精确?我们有< code > system . current time millis 和< code
这里的要点是了解实现等待循环的更有效的解决方案,该循环在每次迭代时轮询条件。通过高效,我的意思是“有效的CPU调度”。 我知道代码中使用的等待条件不是“wakeOne”/“wakeAll”指令中使用的“真正的等待条件”,但我想知道对CPU来说,使用假等待条件是否比睡眠更有效。 这里有2个代码片段,它们做同样的事情:等待某些事情发生。这段代码用于工作线程池。因此,当一个线程等待时,其他线程(或其他一