gpt4 book ai didi

java - 我正在创建一个颜色游戏,如何更新 run() 方法中的变量?

转载 作者:行者123 更新时间:2023-12-02 05:06:57 24 4
gpt4 key购买 nike

package myPackage;
import java.applet.Applet;
import java.awt.Button;
import java.awt.Graphics;
import java.awt.event.*;
import java.awt.Color;
import java.awt.Font;
import java.util.Random;

public class Colorgame extends Applet implements Runnable , ActionListener{

boolean starter = true;

public void init(){
this.setSize(800, 650);
this.setLayout(null);
this.setBackground(Color.pink);
myFont = new Font("Times New Roman",Font.BOLD,20);
new Thread(this).start();

//button
start = new Button("Start");
start.setBounds(370, 610, 50, 30);
start.addActionListener(this);

add(start);
}


public void run(){
while(starter){
try{
ranColor = rand.nextInt(6);
switch (ranColor) {
case 0:
dieColor = Color.red;
Thread.sleep(100);
repaint();
break;
case 1:
dieColor = Color.blue;
Thread.sleep(100);
repaint();
break;
case 2:
dieColor = Color.green;
Thread.sleep(100);
repaint();
break;
case 3:
dieColor = Color.yellow;
Thread.sleep(100);
repaint();
break;
case 4:
dieColor = Color.orange;
Thread.sleep(100);
repaint();
break;
case 5:
dieColor = Color.magenta;
Thread.sleep(100);
repaint();
break;
default:
break;
}
}catch(Exception e){

}
}

}

public void paint(Graphics g){
g.setColor(dieColor);
g.fillRect(355, 90, 80, 80); //colour die
}

这个按钮启动/停止颜色模具的随机变化,但是当我单击该按钮时, boolean starter变为“false”,但在run()方法中它永远不会改变

public void actionPerformed(ActionEvent e) { 
if(e.getSource() == start){
if(starter == true){
starter = false;
start.setLabel("Stop");
}
else if(starter == false){
starter = true;
start.setLabel("Start");
}
}

最佳答案

您正在使用 2 个不同的线程来访问同一个局部变量。在Java中,每个线程都可以为其自己缓存变量的值。为了防止这种情况,请将变量声明为 volatile:

volatile boolean starter = true;

另请参阅http://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html

关于java - 我正在创建一个颜色游戏,如何更新 run() 方法中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27703948/

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