我在java中创建了两个Threads,带有while循环,但是当我运行程序时只有一个Thread工作,为什么?主要的问题是我创造了一个飞扬的鸟类视频游戏,并且在线程中我生成了障碍物,而在另一个线程中我移动了障碍物。 Here有一个飞扬的鸟类游戏物理的例子
import javax.swing.*;
import java.awt.*;
import java.util.Vector;
import java.util.concurrent.ThreadLocalRandom;
public class main {
public static void main(String [] args){
int altezza_frame = 900;
int larghezza_frame = 800;
int gap = 150;
int intervallo = 200;
Vector <JLabel> alti = new Vector<JLabel>();
Vector <JLabel> bassi = new Vector<JLabel>();
JFrame pannello = new JFrame();
Thread inizializza = new Thread(){
@Override
public void run() {
pannello.setSize(larghezza_frame , altezza_frame);
pannello.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
pannello.setLayout(null);
pannello.setResizable(true);
pannello.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("icona.png")));
Color cielo = new Color(66, 203, 244);
pannello.getContentPane().setBackground(cielo);
pannello.setVisible(true);
}
};
Thread ostacoli = new Thread(){
@Override
public void run() {
Color verde = new Color(116, 181, 43);
alti.setSize(1);
bassi.setSize(1);
int x = 0;
while (true){
JLabel alto = new JLabel();
int altezza = ThreadLocalRandom.current().nextInt(100, 450 + 1);
alto.setSize(100, altezza);
alto.setOpaque(true);
alto.setBackground(verde);
alto.setLocation(x, 0);
JLabel basso = new JLabel();
basso.setSize(100, altezza_frame - altezza - gap);
basso.setOpaque(true);
basso.setBackground(verde);
basso.setLocation(x, altezza + gap);
pannello.add(basso);
pannello.add(alto);
alti.add(alto);
bassi.add(basso);
alti.setSize(alti.size()+1);
bassi.setSize(bassi.size()+1);
x+=(100+intervallo);
}
}
};
Thread muovi_ostacoli = new Thread(){
@Override
public void run() {
while (true){
for(int x=0;x<alti.size();x++){
System.out.print("ciao");
}
}
}
};
inizializza.run();
ostacoli.run();
muovi_ostacoli.start();
}
}
感谢您的帮助。