Ich lasse aktuell durchgehend eine while schleife in einem anderen Thread laufen. Dort werden public booleans aus dieser Klasse geprüft. Ist eine boolean true, soll in einer anderen Klasse ein JPannel erstellt werden und einem JFrame hinzugefügt werden. Jetzt ist in einem JPannel ein button, der eine der Variablen auf true setzt. Trotz dessen passiert nichts. Wenn ich die Variable aber manuel auf true setzte macht er es. Kann mir jemand sagen, wie ich das Problem lösen kann?
Der Code:
public class Start implements Runnable{
public boolean running = true;
public boolean multi = false;
public boolean single = false;
public boolean Startscreens = true;
public static JFrame window = new JFrame();
public static void main(String[] args){
window.setLocationRelativeTo(null);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setTitle("Monopoly");
window.setResizable(false);
window.setVisible(true);
window.setLocationRelativeTo(null);
Start start = new Start();
start.startGameThread();
}
public void startGameThread(){
Thread gameThread;
gameThread = new Thread(this);
gameThread.start();
}
@Override
public void run(){
gamePanel panel = new gamePanel();
startscreen Startscreen = new startscreen();
while(running){
if(Startscreens){
window.add(Startscreen);
window.pack();
window.setLocationRelativeTo(null);
start.Startscreens = false;
}
if(multi){ //dieses boolean wird mit dem button verändert, trotz dessen wir der Code in der if nicht ausgeführd
window.add(panel);
window.pack();
window.setLocationRelativeTo(null);
start.multi = false;
}
}
}
}
public startscreen(){
gamePanel Gamepannel = new gamePanel();
Start start = new Start();
this.setPreferredSize(new Dimension(Gamepannel.width, Gamepannel.height));
this.setDoubleBuffered(true);
this.setFocusable(true);
this.setVisible(true);
JButton multiplayer = new JButton("MULTIPLAYER");
multiplayer.setVisible(true);
multiplayer.setPreferredSize(new Dimension(300, 100));
multiplayer.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
start.multi = true;
}
});
this.add(multiplayer);
}
}
Der Code:
public class Start implements Runnable{
public boolean running = true;
public boolean multi = false;
public boolean single = false;
public boolean Startscreens = true;
public static JFrame window = new JFrame();
public static void main(String[] args){
window.setLocationRelativeTo(null);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setTitle("Monopoly");
window.setResizable(false);
window.setVisible(true);
window.setLocationRelativeTo(null);
Start start = new Start();
start.startGameThread();
}
public void startGameThread(){
Thread gameThread;
gameThread = new Thread(this);
gameThread.start();
}
@Override
public void run(){
gamePanel panel = new gamePanel();
startscreen Startscreen = new startscreen();
while(running){
if(Startscreens){
window.add(Startscreen);
window.pack();
window.setLocationRelativeTo(null);
start.Startscreens = false;
}
if(multi){ //dieses boolean wird mit dem button verändert, trotz dessen wir der Code in der if nicht ausgeführd
window.add(panel);
window.pack();
window.setLocationRelativeTo(null);
start.multi = false;
}
}
}
}
public startscreen(){
gamePanel Gamepannel = new gamePanel();
Start start = new Start();
this.setPreferredSize(new Dimension(Gamepannel.width, Gamepannel.height));
this.setDoubleBuffered(true);
this.setFocusable(true);
this.setVisible(true);
JButton multiplayer = new JButton("MULTIPLAYER");
multiplayer.setVisible(true);
multiplayer.setPreferredSize(new Dimension(300, 100));
multiplayer.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
start.multi = true;
}
});
this.add(multiplayer);
}
}