所以我制作了一个程序,我在运行程序时出现了一个时钟。所以。当我按下“开始”按钮时,时钟应该在一个边界内随机出现并作为一个时钟(我的意思是数字,15:18:19,15:18:20)。但是每当我按下程序时,我的问题就出现了。时钟停留在同一个位置,当将睡眠时间改为等时500.然后它开始移动,但是时间semms更快(因为它应该睡1000)。但是我没有在代码中看到它应该去的问题。但是也许你们中的一些人可以帮助我。
public void startClock() {
Thread t2 = new Thread() {
public void run() {
if (clocking) {
Random rand = new Random();
while(clocking){
Calendar cal = Calendar.getInstance();
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
movingClock.setText(hour + ":" + minute + ":" + second);
int x = rand.nextInt(100) + 1;
int y = rand.nextInt(100) + 1;
movingClock.setBounds(x, y, 150, 150);
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
};
t2.start();
}
其中clocking = true。因为每当我按下按钮。我将时钟转为true,然后运行startClock()。
但正如我之前所说。如果我将睡眠时间改为500以下,数字时钟只会随机出现。如果睡眠时间如何(1000)我怎么能让它工作?
编辑新的一个:
public void startMoving() {
Thread t1 = new Thread() {
public void run() {
if (moving) {
Random random = new Random();
while (moving) {
int x = random.nextInt(100) + 1;
int y = random.nextInt(100) + 1;
movingDisplay.setBounds(x, y, 150, 150);
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
};
t1.start();
}
public void startClock() {
Thread t2 = new Thread() {
public void run() {
if (clocking) {
Random rand = new Random();
while(clocking){
Calendar cal = Calendar.getInstance();
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
movingClock.setText(hour + ":" + minute + ":" + second);
int x = rand.nextInt(100) + 1;
int y = rand.nextInt(100) + 1;
movingClock.setBounds(x, y, 150, 150);
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
movingClock.setText(hour + ":" + minute + ":" + second);
movingClock.setBounds(x, y, 150, 150);
movingDisplay.setBounds(x, y, 150, 150);
}
} );
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
};
t2.start();
}
答案 0 :(得分:0)
我猜你试图在像JPanel这样的Swing组件上移动你的时钟。您应该对Event Dispatch Thread
上的组件进行所有修改您的代码应如下所示:
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
movingClock.setText(hour + ":" + minute + ":" + second);
movingClock.setBounds(x, y, 150, 150);
}
} );