2010-04-03 102 views
0

我想知道是否有人能幫助我理解我的代碼可能會出錯的地方;基本上我正在研究一個教程,並從另一個類中調用下面的類 - 它會得到以下錯誤;線程行爲不正確

異常在線程 「螺紋-1」 顯示java.lang.NullPointerException 在org.newdawn.spaceinvaders.TCPChat.run(TCPChat.java:322) 在java.lang.Thread.run(未知來源)

我意識到錯誤被標記在另一個類中 - 但我已經用另外一個類來測試另一個類,它創建了一個單獨的線程 - 它工作正常,但只要我嘗試在此類中實現新線程 - 它會導致各種問題。我是否在這堂課中正確設置了線程?

基本上我可以在這個類中設置一個線程,帶有一個測試循環並且很好,但是當我帶入遊戲其餘部分的功能時,它有時會掛起或根本不顯示。

任何有關我可能會出錯的建議將不勝感激。

感謝您的期待。

+3

621行代碼?嘿,有什麼相關的? – miku 2010-04-03 20:19:47

+0

提供'TCPChat'的代碼而不是你給的代碼。 – Bozho 2010-04-03 20:21:02

+0

@The MYYN其實沒有:D – Bozho 2010-04-03 20:21:18

回答

2

NullPointerException是最常見的異常,很容易識別。它發生在很多情況下(列在鏈接的javadoc中),但最常見的是調用null對象的方法。例如,如果您有:

String str = null; 
str.substring(2,4); // str is null and NullPointerException is thrown 

,所以還是由堆棧跟蹤(TCPChat.java:322)表示該行代碼,並檢查是否有null對象有在其上調用方法。如果有,請確保它們不是null,或者製作if語句,該語句檢查if (obj != null)是否執行代碼。

更新:看來connectButtonnull。在您致電開始線程之前,您必須致電initOptionsPane()。在org.newdawn.spaceinvaders.TCPChat.run(TCPChat.java:322)

+0

我堅持在那裏的聊天班,謝謝你的建議,我會看看,看看我能看到什麼問題在322。 – ivor 2010-04-03 20:56:08

+0

@ivor檢查我的更新 – Bozho 2010-04-03 21:02:46

+0

謝謝 - 我現在看看。 – ivor 2010-04-03 21:16:45

3

顯示java.lang.NullPointerException

打開TCPChat.java源文件,PEEK到線322和在該特定線環視點運算符.已用於訪問某些對象引用。喜歡的東西:

someObject.doSomething(); 

一個NullPointerException在這條線意味着someObjectnull。您無法訪問或調用什麼也沒有。爲了解決這樣的問題,你只需要確保someObject是在那一刻空:

if (someObject == null) { 
    someObject = new SomeObject(); 
} 
someObject.doSomething(); 

或者您需要跳過整個調用時,它是null

if (someObject != null) { 
    someObject.doSomething(); 
} 

順便說一句,沒有什麼與線程。這只是一個編程錯誤,與其他所有RuntimeException一樣。

+0

(+1)。這至少是今天第二次有人不瞭解NPE ..我只是想知道打開javadoc有多難。當我開始編程時,我不記得NPE有麻煩.. – Bozho 2010-04-03 20:46:38

+0

感謝您的建議,這是非常有幫助的。 – ivor 2010-04-03 20:56:59

+0

@Bozho:你有程序員和程序員。 @ivor:不客氣。 – BalusC 2010-04-03 21:05:58

1

關於這個問題的標題:線程表現正確。這是你的代碼在線程中不是;)