gpt4 book ai didi

java - Thread Run() 后实例变量为空 - Java 扑克骰子程序

转载 作者:行者123 更新时间:2023-12-02 08:46:32 25 4
gpt4 key购买 nike

我正在创建一个扑克骰子游戏,但无法获取作为实例变量的列表的值。

    public class ThrowDice { 
List<String> result = new CopyOnWriteArrayList<>();

这个List的值在Thread run()方法中同时改变,其功能是设置五个骰子同时“滚动”。我使用 add() 在实例列表中添加结果值(即骰子停止滚动时的值),但是当我稍后尝试检索列表的值时(例如,在最后) rollDice 方法本身),数组为空。

代码:

void rollDice(JLabel k, JLabel q, JLabel j, JLabel n, JLabel t, JLabel a) throws InterruptedException {

new Thread() {

@Override
public void run() {
String res = "";
try {
int times = 8;

for (int i = 0; i <= times; i++) {

int random = (int) (Math.random() * 6) + 1;

switch (random) {
case 1:
k.setVisible(true);

res = "k";
break;
case 2:
q.setVisible(true);

res = "q";
break;
case 3:
j.setVisible(true);

res = "j";
break;
case 4:
t.setVisible(true);

res = "t";
break;
case 5:
n.setVisible(true);

res = "n";
break;
case 6:
a.setVisible(true);

res = "a";
break;
}

Thread.sleep(300);
if (i == times) {
result.add(res);
System.out.println("The result is " + result);// **this works, List has values**
} else {
setToFalse(k, q, j, t, a, n);

}

} // end for

} catch (InterruptedException e) {
}

} //end run

}.start(); //end thread
System.out.println("The result is " + result);// **--------------- List is empty (why?)**

}//end rolldice

}

就好像 List 的值在 Run() 结束后被删除,我需要能够检索 ArrayList 值,以便将其传递给其他方法。

最佳答案

第二个 println() 调用几乎肯定会发生,而 rollDice() 函数在第一次调用 sleep(300) 时仍处于 hibernate 状态。 >。 (即,在将任何内容添加到列表之前。)

Johannes Kuhn 建议您“尝试.join 线程。”他的意思是:

Thread t = new Thread() {

@Override
public void run() {
...
} //end run
};

t.start();
t.join(); // This _waits_ until the thread has finished its work.
System.out.println(...);
<小时/>

但是这个建议有一个问题:也就是说,它永远之后的下一个语句中的.join()线程没有任何意义。 start()ing 它。线程的全部要点是它们可以彼此并发工作。

这是有道理的:

t.start();
DoSomethingElseConcurrentlyWithThread_t(...);
t.join();

关于java - Thread Run() 后实例变量为空 - Java 扑克骰子程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61047680/

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