应用程序有一个循环来填充字节数组(无限次直到按下按钮,但停止它正在工作),并且活动中有6个(图像)按钮。第一个ImageButton应插入数组0,第二个应插入1,依此类推。
活动和主题:
public class TestMap extends AppCompatActivity {
volatile private ImageButton a;
volatile private ImageButton b;
volatile private ImageButton c;
volatile private ImageButton d;
volatile private ImageButton e;
volatile private ImageButton f;
private boolean round0 = false;
private static volatile boolean stop = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
a = findViewById(R.id.flag_a);
b = findViewById(R.id.flag_b);
c = findViewById(R.id.flag_c);
d = findViewById(R.id.flag_d);
e = findViewById(R.id.flag_e);
f = findViewById(R.id.flag_f);
Button end = findViewById(R.id.endturn);
new Thread(new Runnable() {
public void run() {
while (!stop){
round0 = true;
for(int i = 0; i < squad_0.length; i++){
squad_0[i] = set_sqm0();
}
}
}
}).start();
round0 = false;
}
这会停止循环(和工作):
public void endt(View view){
stop = true;
}
不工作的部分:
public Byte set_sqm0() {
selected = 0; //default value
a.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selected = 0;
}
});
//the same is for b-f, the selected value is 1-5
return selected;
}
即使我删除默认值或将按钮的值编辑为6,程序也会在没有按任何按钮的情况下将数组填入0,即使有人帮助我如何暂停程序直到用户按下按钮?
答案 0 :(得分:1)
首先你不需要也不应该在 set_sqm0()中调用 a.setOnClickListener(...),因为这会在每次通过while循环时连续执行你的线程。同样适用于 selected = 0 的初始化,这也是在while循环的每次迭代中执行,在按下按钮后将选择重置为0。在创建线程之前,您应该移动 setOnClickListener()调用以及 onCreate()中所选的初始化。