2017-03-27 2 views
-2

これはなぜ機能しないのか全く分かりませんが、GUIはgetMove(GameState gameState)メソッド内の何かに応答しません。Java/Chess Odd Gui Bug

私が移動した後に睡眠をとっても、何も表示されません。どんな助けも素晴らしいだろう。私はとても失われています。

public class Engine extends Player { 

    private GameState copy; 

    public Engine(Color color, Direction direction) { 
     super(color, direction); 
    } 

    public Move getMove(GameState gameState) { 
     gameState.executeMove(new Move(4, 6, 4, 4)); 
     try { 
      TimeUnit.SECONDS.sleep(1); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return new Move(5, 6, 5, 4); 
    } 
} 

答えて

2

あなたは、そのイベントスレッドは、そのようなGUIを描画し、ユーザーとの対話としての必要な活動をしているから、それを防止、イベントスレッドをブロックします何か、そしてその意志にSwingのGUI内sleepを呼んでいますGUIをスリープ状態にして応答しないようにしてください。これを解決するには、代わりにSwing Timerを使用します。

問題:オーバーライドメソッドの最初の行にsuper.paintComponent(g);メソッドの呼び出しを追加します。これによりJPanelはハウスキーピングペインティングを実行できます。

+0

Ah。非常に便利。ありがとうございました。これらのタイマーの1つでGUI絵画を一時停止する、すばやくエレガントな方法はありますか?それの外観からは、それはそれのようには見えません。 もう一度おねがいします^。^解決済みとマークします。 – thePanthurr

+0

@thePanthurr:The Timer ***は、簡単なスイングアニメーションを一時停止または引き起こす最速の最もエレガントな方法です。彼らは使用するのが難しくありません - ちょうどチュートリアルをチェックし、それを試してみてください。 –

+0

まあ、それは私をトリップしていることは、GUIがそれを再描画する定期的なループで実行されていないということです。移動が行われた後に再描画されているため、スイングタイマーを使用するのは難しいようです。私は彼らがどのように使用されるべきかを完全に誤解していない限り。 – thePanthurr