2016-06-19 47 views
1

我有一個奇怪的問題,我的應用程序不能在'運行'上工作,但只能在調試時使用。KeyListener只能在調試器上工作,但不能運行

我試着按下按鈕開始遊戲,但後來keyListener劑量工作(它在調試時確實工作正常)。我有3個面板,第一個是登錄,點擊按鈕後,它應該開始遊戲並移除當前面板。第二和第三是分數區和比賽區。當即時通訊開放遊戲沒有LoginPanel它確實工作正常。你有什麼想法可能是錯誤的?

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

爲了更好地幫助更快,發佈[短的,獨立的,正確的(可編譯),例](http://sscce.org/)和/或[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – MasterBlaster

+2

對於Swing,我們通常使用[鍵綁定](https://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html)而不是較低級別的'KeyListener'。 –

回答

0

在JPanel並比添加一個關鍵聽衆與if語句,你可以設置哪些關鍵要控制

相關問題