gpt4 book ai didi

java - 线程运行无法正常工作

转载 作者:行者123 更新时间:2023-12-01 16:50:37 24 4
gpt4 key购买 nike

我编写了一个简单的 Java 程序,它使用 Thread 对象在 JPanel 周围移动一个正方形。方 block 移动到随机位置,更改其颜色,并且 JPanel 更改其背景颜色。然后线程 hibernate 1000 毫秒。但随后我又添加了一行代码,将 +1 添加到 JLabel,并且方 block 停止移动(而分数正在运行并添加 +1)。

这是代码:

@Override
public void run() {

Random random = new Random();

int width = 0;
int height = 0;

while(true) {

width = random.nextInt(area.getSize().width) + 1;
height = random.nextInt(area.getSize().height) + 1;

width -= ((width - 45) > 0) ? 45 : 0;
height -= ((height - 45) > 0) ? 45 : 0;

this.square.setLocation(width, height);
this.square.setIcon(new ImageIcon(getClass().getResource("/img/square" + (random.nextInt(4) + 1) + ".png")));
this.area.setBackground(new Color(random.nextInt(255) + 1, random.nextInt(255) + 1, random.nextInt(255) + 1));

//The following line works, but the setLocation method stops working.

this.score.setText(Integer.toString(Integer.parseInt(this.score.getText()) + 1));

try {

sleep(1000);

} catch (InterruptedException ex) {

Logger.getLogger(RunThread.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

有什么想法吗?

谢谢。

编辑:这就是我创建线程的方式...

public Click() {

initComponents();
pack();
setLocationRelativeTo(null);
setVisible(true);

RunThread run = new RunThread(jLabel1, jLabel2, jPanel1);
run.run();

}

最佳答案

invoke the run() method in

这是错误的。这不是如何使用Thread。如果您调用 run() 方法,那么它就像任何其他方法一样对待,并且您没有使用 Thread。因此,每当您使用 Thread.Sleep(...) 时,都会导致事件调度线程 (EDT) hibernate ,这意味着 GUI 无法重新绘制自身。/p>

使用线程。您需要调用 Thead 上的 start() 方法,因此代码应为:

run.start();

关于java - 线程运行无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40824360/

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