2013-11-02 80 views
0

我的代碼有問題。我認爲我的問題很簡單,但我已經編譯了3天,沒有好的結果。我有三個圖像。他們每次都會在屏幕上一一顯示。如果圖像的側面向上,向下,向右或向左,用戶可從4按鈕​​中進行選擇。此外,我想了解用戶是否是錯誤的,然後我會計算錯誤。當用戶發出3個錯誤時,遊戲將停止。我已經在下面顯示了代碼。如果你有什麼好主意,請幫助我。 問題是,在第一個循環,運行正確。它在第一個如果。之後,它做循環,然後它不會去秒。 如果它更有幫助,一些細節: 我想製作一個程序,它會顯示給用戶一個圖像。該圖像有4個方面(上,下,右,左)。當圖像處於「上方」 ,用戶必須點擊向上按鈕,當圖像處於「向下」狀態時,用戶必須點擊向下按鈕等等。用戶最多可以執行3個錯誤。首先,程序在右側顯示圖像,如果用戶點擊右鍵然後我想在左側顯示「第二圖像」。如果用戶不在左側,那麼我想添加一個錯誤(錯誤++)和在它顯示第三張圖像之後,我希望它對理解更有幫助。如果你不能請讓我知道。我的程序在Netbeans,java。 謝謝不要更改圖標,java

public void actionPerformed(ActionEvent e) 
{  
    while(errors<3) 
    { 
     image.setIcon(createImageIcon("visual1" + e.getActionCommand() + ".PNG")); 
     if (k==1) 
     { 
      if(e.getSource() == right_button) 
      { 
       image.setIcon(createImageIcon("visual2" + e.getActionCommand() + ".PNG"));   
      }   
     } 
     else if (k==2) 
     { 
      if(e.getSource() == left_button) 
      { 
       image.setIcon(createImageIcon("visual3" + e.getActionCommand() + ".PNG")); 
      } 
     }  
     else if (k==3) 
     { 
      if(e.getSource() == up_button) 
      { 
       System.out.print("if3"); 
      } 
     } 
     else 
     { 
      errors++; 
     } 
     k=k+1; 
    } 
} 
+2

我不能說全部,但我很難理解你的問題和你的代碼。我認爲這部分可能是一個語言問題。請考慮告訴我們更多。 –

+1

您的代碼喜歡它可能會進入長時間運行或永不停止的循環,這將阻止Swing事件線程,凍結您的程序。這是發生了什麼? –

+0

如果它沒有轉到第二個if,那麼它可能是k不等於2,那麼爲什麼不把print語句放在while循環開始時打印k的值來檢查k = 2是其中之一,還是你已經做到了? –

回答

0

你應該考慮調用RepaintInvalidate,更新您的GUI這樣之後 -

mainframe.repaint(); 
    mainframe.invalidate(); 

這裏大型機是你的JFrame對象。

+0

這不是他所需要的,並且在設置JLabel的圖標時不應該被需要。 –

+0

Thanks @HovercraftFullOfEels,有沒有人有什麼好主意?我認爲這很容易,但是我嘗試3天..:/ – user2933161

0

我在while循環中看到的一個問題是,它有可能陷入無限循環,因爲用作退出標準的變量只是在某個else塊中更新了某些時間。我認爲你應該重新安排你的邏輯:

  • 擺脫while循環,因爲它只會造成麻煩。它對於線性命令行程序非常有用,但不適用於像您這樣的事件驅動的GUI程序。
  • 閱讀所有圖像並在類構造函數中創建所有ImageIcons,並將它們存儲在變量中。不需要多次重新讀取圖像(除非它們很大)。
  • 而不是使用while循環,在上面的方法中增加錯誤變量,然後編寫方法,以便根據錯誤值(取決於類的狀態)更改行爲。

例如,

// somewhere in your code create your icons 
Icon rightIcon = ......; 
Icon leftIcon = .....; 
Icon upIcon = .....; 
Icon downIcon = .....; 

// elsewhere in your code 
public void actionPerformed(ActionEvent e) { 
    if (errors >= 3) { 
    // notify user of error 
    return; // end this method 
    } 

    // check if current icon matches image 
    // if so, change icon 
    // if not increment error 
} 

注意的enum Direction {UP, DOWN, LEFT, RIGHT}Map<Direction, Icon>可幫助在這裏。

+0

Thans爲您提供幫助,我嘗試這種方式。我希望,這對我有幫助! :) – user2933161