2013-12-20 30 views
0

我一直在努力,以測試我的文本字段包含無論是在我的HashSet的,但由於某種原因,它不是在這裏工作是我的代碼:如何測試,如果一個HashSet包含的文本字段的東西

int WrongCounter = 0; 
int RightCounter =1; 
boolean isOver = false; 
while(!isOver){ 
    question.setText("You have a "+RandomWord.length()+" letter word " + set); 
    char input = scan.next().charAt(0); 
    hangMan(WrongCounter); 
    if(set.contains(ansField.getText().charAt(0))){ 
     set.remove(ansField.getText().charAt(0)); 
     right.setText("You are right"); 
     RightCounter++; 
    } 
    else if(!(set.contains(ansField.getText().charAt(0)))){ 

     right.setText("You are wrong!"); 
     WrongCounter++; 
    } 
    if(set.size()==0||WrongCounter ==8){ 
     isOver = true; 
     hangMan(WrongCounter); 
    } 

這裏是劊子手方法

private void hangMan(int wrongCounter) { 


     switch(wrongCounter){ 
     case 1: 
      hangMan.setText("  -------|\n  |\n  |\n  |\n___|___"); 
      break; 
     case 2 : 
      hangMan.setText("  -------|\n  |\n  |\n  |\n___|___"); 

      break; 
     case 3: 
      hangMan.setText("  -------|\n  |   O\n  |\n  |\n___|___"); 
      break; 
     case 4 : 
      hangMan.setText("  -------|\n  |   O\n  |   /\n  |\n___|___"); 
      break; 
     case 5: 
      hangMan.setText("  -------|\n  |   O\n  |   /|\n  |\n___|___"); 
      break; 
     case 6 : 
      hangMan.setText("  -------|\n  |   O\n  |   /|\\\n  |\n___|___"); 
      break; 
     case 7 : 
      hangMan.setText("  -------|\n  |   O\n  |   /|\\\n  |   /\n___|___"); 
      break; 
     case 8 : 
      hangMan.setText("  -------|\n  |   O\n  |   /|\\\n  |   /\\n___|___"); 
      break; 
     } 

    } 

每當我嘗試這個程序崩潰,我不知道爲什麼

+0

你能提供的堆棧跟蹤? – MAV

+0

它確實崩潰它只是凍結,我不得​​不關閉它 – user3097544

+0

這將表明'isOver'永遠不會被設置爲true。是'set.size()== 0 || WrongCounter == 8'永遠是真的嗎? – MAV

回答

0

這不是崩潰,這是一個無限循環。該程序變得無響應,因爲您可能在附加到JTextFieldActionListener或由EDT線程調用的JButton內執行此代碼。

GUI java應用程序不像控制檯應用程序,涉及多個線程,您不應該像在您的示例中那樣使用循環來阻止事件線程。你有一些未使用的代碼:

char input = scan.next().charAt(0); 

這是阻塞在您的控制檯版本輸入。現在您不再需要循環,因爲用戶本身會重複用戶界面上的操作並多次調用actionPerformed方法。

你想要做什麼?驗證輸入的文本是隱藏詞的置換嗎?或者只是檢查第一個字符?在這兩種情況下,你應該刪除循環和存儲actionPerformed方法以外的變量:

int wrongCounter = 0; 
int rightCounter = 0; 

public void actionPerformed(ActionEvent e) { 
    char currentCharacter = textField.getText().charAt(0); 

    if (set.contains(currentCharacter)) { 
    ++rightCounter; 
    // whatever 
    } 
    else { 
    ++wrongCounter; 
    } 

    if (set.size() == 0 || wrongCounter == 8) 
    hangMan(); // doesn't need parameter anymore, it's outside the method 
} 
+0

它現在有效謝謝 – user3097544

+0

控制檯程序無法正常工作輕鬆地在GUI環境中,它們以不同的方式工作 – Jack

+0

另請參見[「Swing中的併發」](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)。 – Radiodef

相關問題