2016-06-19 14 views
1

Ich habe seltsames Problem, meine Anwendung funktioniert nicht auf 'run', sondern nur während des Debuggens.KeyListener arbeitet nur auf Debugger, aber nicht auf Run

Ich versuche, das Spiel zu starten, während die Taste gedrückt wird, aber dann keyListener dosent Arbeit (es funktioniert ordnungsgemäß beim Debuggen). Ich habe 3 Panel, das erste ist für die Anmeldung, und nach dem Klicken auf die Schaltfläche sollte das Spiel starten und das aktuelle Panel entfernen. Die zweite und dritte sind für Spielstand und Spielbereich. Wenn ich ein Spiel ohne LoginPanel öffne, funktioniert es gut. Hast du irgendwelche Ideen was falsch sein kann?

public LoginPanel(MainFrame mainFrame) 
{ 
    this.mainFrame = mainFrame; 
    makeGIU(); 

} 
public void paintComponent(Graphics g) { 
    g.drawImage(img, 0, 0, getWidth(), getHeight(), this); // draw the image 
} 

private void makeGIU() 
{ 
    this.img = new ImageIcon(SOURCE).getImage(); 
    setDimension(); 
    button = new JButton("OK"); 
    nickLabel = new JLabel("<html>SOKOBANA<br>TOMASZ JANIEC<br>KACPER KUSTRA</html>", JLabel.CENTER); 
    nickLabel.setFont(new Font("Gloria Hallelujah",Font.PLAIN,20)); 
    nickLabel.setSize(100,50); 
    this.setLayout(new FlowLayout()); 
    button.addActionListener(evt -> { 
     mainFrame.remove(this); 
     mainFrame.newGameStart(); 
     mainFrame.revalidate(); 
    }); 
    this.setPreferredSize(Size); 
    this.add(button); 
    this.add(nickLabel); 
    this.add(nickText); 
    mainFrame.getContentPane().add(this,BorderLayout.CENTER); 
} 
public MainFrame() { 
    setTitle(TITLE); 
    setVisible(true); 
    setBounds(new Rectangle(DEFAULT_WIDTH, DEFAULT_HIGHT)); 
    makeMenu(); 
    this.setResizable(true); 
    //newGameStart(); // this does work 
    this.add(new LoginPanel(this)); // this dosent 
    revalidate(); 
} 


public void newGameStart() { 
     Thread t = new Thread(new MyRunnable(this, DEFAULT_WIDTH, DEFAULT_HIGHT, mapNames) { 
     }); 
     t.start(); 

} 
+1

Für eine bessere Hilfe festlegen können, senden Sie uns eine [Kurz, Self Contained, Correct (kompilierbare), Beispiel ] (http://sscce.org/) und/oder ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve). – MasterBlaster

+2

Für Swing verwenden wir normalerweise [key bindings] (https://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html) und nicht die untere Ebene 'KeyListener'. –

Antwort

0

hinzufügen Schlüssel Zuhörer auf dem JPanel und als mit einer if-Anweisung Sie früher, welche Taste steuern möchten