Hallo,
ich habe eine while Schleife, die durch eine Tastatureingabe abgebrochen werden soll. Befindet sich diese Schleife im Actionlistener hängt sie sich auf, befindet sie sich außerhalb des Actionlisteners funktioniert der Code wie gewollt.
Hier der "vereinfachte" Code:
Im Actionlistener:
Ohne Acionlistener:
Vielen Dank für die Hilfe!
ich habe eine while Schleife, die durch eine Tastatureingabe abgebrochen werden soll. Befindet sich diese Schleife im Actionlistener hängt sie sich auf, befindet sie sich außerhalb des Actionlisteners funktioniert der Code wie gewollt.
Hier der "vereinfachte" Code:
Im Actionlistener:
Java:
package programm;
package programm;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class kkk {
static JPanel mainpanel;
static JFrame mainframe;
static JMenuItem spaufnehmen;
static Boolean space = false;
public static void main(String[] args) {
// TODO Auto-generated method stub
mainframe = new JFrame();
mainframe.setBounds(250, 70, 900, 500);
mainpanel = new JPanel();
mainpanel.setBackground(Color.gray);
mainpanel.setLayout(null);
mainframe.add(mainpanel);
JMenuBar bar = new JMenuBar();
bar.setBounds(0, 0, 1366, 23);
mainpanel.add(bar);
spaufnehmen = new JMenuItem("Aufnehmen");
bar.add(spaufnehmen);
mainframe.setVisible(true);
mainframe.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if (e.getKeyCode() == 32) { // 32 = leertaste
space = true;
System.out.println("pressed");
}
}
});
spaufnehmen.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
while (!space) {
try {
if (space) {
break;
}
System.out.println(!space);
Thread.sleep(1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
System.out.println("schleife raus");
};
});
}
}
Ohne Acionlistener:
Java:
package programm;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class kkk {
static JPanel mainpanel;
static JFrame mainframe;
static JMenuItem spaufnehmen;
static Boolean space = false;
public static void main(String[] args) {
// TODO Auto-generated method stub
mainframe = new JFrame();
mainframe.setBounds(250, 70, 900, 500);
mainpanel = new JPanel();
mainpanel.setBackground(Color.gray);
mainpanel.setLayout(null);
mainframe.add(mainpanel);
JMenuBar bar = new JMenuBar();
bar.setBounds(0, 0, 1366, 23);
mainpanel.add(bar);
spaufnehmen = new JMenuItem("Aufnehmen");
bar.add(spaufnehmen);
mainframe.setVisible(true);
mainframe.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if (e.getKeyCode() == 32) { // 32 = leertaste
space = true;
System.out.println("pressed");
}
}
});
while (!space) {
try {
if (space) {
break;
}
System.out.println(!space);
Thread.sleep(1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
System.out.println("schleife raus");
}
}
Vielen Dank für die Hilfe!