2015-03-31 51 views
0

我用Java爲學校編寫了一個小遊戲。我們有給定功能的圖書館。我編寫了一個重複執行命令的代碼(while),我用println檢查了命令運行正常,但在GUI中看不到結果,只看到最後一個結果。圖形用戶界面不在框架中顯示命令

項目:https://drive.google.com/open?id=0B5Ehxz_FAn6BMjVPOWY5MkgycVk&authuser=0

代碼:

public void spielen() { 
     if (guthaben > 0) { 
      if (endlosspielAktiv) { 
       while (guthaben > 0) { 
        kasten.Ringe.faerbeUm(); //Here the GUI doesn't show the results 
        ZEICHENFENSTER.gibFenster().warte(500); 
        guthabenRunter(); 
       } 
       setEndlosspielAktiv(false); 
      } else { 
       kasten.Ringe.faerbeUm(); 
      } 
     } else if (guthaben == 0) { 
      setEndlosspielAktiv(false); 
     } 
     guthabenRunter(); 
    } 
+0

我們幫不了你現在 - 你需要給我們提供更多的代碼。你可以嘗試提供一個完整的例子(編譯;並可以運行重現你的問題)? – GhostCat 2015-03-31 08:45:42

+0

一件好事就是用英文編寫代碼,所以它會更容易理解,所以不同的人想讀你的代碼 – damus4 2015-03-31 08:46:37

+0

好的是從谷歌驅動器的壓縮好嗎? – 2015-03-31 08:46:57

回答

0

你的GUI是隻有在所有待定更新和運行調用線程的方法返回。 在您的情況下,GUI的更新將延遲到方法spielen()返回。

爲了有立竿見影的效果,你可以使用一個額外的主題是這樣的:

public void spielen() { 
     new Thread(new Runnable() { 

      @Override 
      public void run() { 
       if (guthaben > 0) { 
        if (endlosspielAktiv) { 
         while (guthaben > 0) { 
          kasten.Ringe.faerbeUm(); 
          ZEICHENFENSTER.gibFenster().warte(500);        
          guthabenRunter(); 
         } 
         setEndlosspielAktiv(false); 
        } else { 
         kasten.Ringe.faerbeUm(); 
        } 
       } else if (guthaben == 0) { 
        setEndlosspielAktiv(false); 
       } 
       guthabenRunter(); 
      } 
     }).start();   
    } 

spielen()所有代碼異步運行,並不會阻止返回的方法。

如果您想了解更多關於線程,我可以推薦你閱讀(德國)的按章電子書http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_14_003.htm

+0

好吧,thx我有schrödinger那個,但是沒有在書中到目前爲止,我會搜索完本章後,thx幫助 – 2015-04-01 12:45:35

+0

它工作!多謝! :) – 2015-04-01 12:49:01