2014-05-10 116 views
3

我在Java中學習線程時遇到了一些問題。我們的目標是做一個模擬,向我們展示兔子在某種棋盤上如何從狼羣中跑步。每隻狼和每隻兔子都應該是一條線索。所以我在Test類的主要方法中創建了一個GUI,並創建了一個實現Runnable接口的新類。我認爲這很簡單合乎邏輯。但是現在,我怎樣才能從這些線程調用AddRabbit方法?因爲很多線程應該做mething,如:地圖 10個線程繪製在一個JPanel

  • 檢查其他線程在地圖上放置

    1. 變化般的地方它的屬性
    2. 油漆本身的面板

    但如何呢?

  • +0

    您正在爲您的工作使用錯誤的工具。線程應該用在你想有*併發*執行時,這並不意味着並行(如通常假設的那樣),而是*沒有任何時序關係*。另一方面,*模擬*通常意味着所有參與者/組成部分之間的相互關係都是相互關聯的。你應該使用普通對象和一個'Timer'。 – Holger

    回答

    5

    不允許直接使用多線程更新Swing組件 - Swing不是線程安全的。還有就是它處理一個Swing事件隊列,所以如果你有在現有的線程來更新一個JComponent,你會使用下面的代碼:

    //You are currently in a separate thread that's calculating your rabbit positions 
    SwingUtilities.invokeLater(new Runnable() { 
        public void run() { 
         //Put in code to modify your Swing elements 
        } 
    }); 
    

    所以每次你覺得需要更新您的圖形用戶界面,那麼您可以使用SwingUtilities.invokeLater方法將Runnable的實例傳遞到Swing事件隊列中,該方法將在其自己的線程中處理。

    +0

    好,簡單而好的答案,但你沒有得到這個問題,或者我寫得不夠清楚。目標是在一個線程少的對象上運行。我需要在哪裏創建這個對象?在測試課上?現在我已經在Test類中創建了它,但是我覺得它不是個好主意,我不知道爲什麼^^無論如何謝謝! –

    +0

    這是一個正確的方法;一個完整的例子見[這裏](http://stackoverflow.com/a/7519403/230513)。 – trashgod

    +0

    我不知道如何給你一些喜歡或不喜歡,但謝謝你:) –