2012-08-14 155 views
1
blueButton.addActionListener(new blueButtonListner()); 

當輸入此代碼時會發生什麼?需要ActionListener代碼說明

我認爲什麼是Java編譯器創建一個名爲blueButtonListner()一個對象,它成爲一個輸入(參數)addActionListener

如果這是正確的,因爲我猜得那麼這段代碼也應該工作:

redButton.addActionListener(rr); 
redButtonListener rr =new redButtonListener(); 

但它顯示一個錯誤。誰可以給我解釋一下這個?

+1

*糾正你的代碼「但它顯示了我一個錯誤」 *複製/粘貼錯誤。他們的目的是自我解釋。 – 2012-08-14 03:17:29

+0

因爲rr在那一點上是nullpointerexception(調用addActionListener) – 2012-08-14 03:18:36

+2

@ArunPJohny不會編譯,因爲'rr'未定義在第一位 – MadProgrammer 2012-08-14 03:20:14

回答

2

這是如果優先級的問題,你不能擁有的東西它的創建

redButton.addActionListener(rr); redButtonListener rr =new redButtonListener(); 

之前不會工作,因爲rr尚未定義,編譯器不知道是什麼想法。

相反

blueButton.addActionListener(new blueButtonListner()) 

編譯器創建臨時對象,並將其傳遞到addActionListener方法。

你可以用這個

redButtonListener rr =new redButtonListener(); 
redButton.addActionListener(rr); 
+0

非常感謝您的幫助 – ChawBawwa 2012-08-14 06:17:21

6

的偵聽器對象需要聲明它是用來以前

redButtonListener rr = new redButtonListener(); 
redButton.addActionListener(rr); 

你是正確的約blueButton.addActionListener(new blueButtonListner());。此聲明創建blueButtonListener類的實例,該類立即傳遞給addActionListener

+0

這是不正確的。在這種情況下,不會創建匿名內部類。 – RAY 2012-08-14 03:19:36

+2

@RAY感謝捕捉,編輯 – pb2q 2012-08-14 03:21:58

+0

沒有問題。快速週轉:) Upvoted。 – RAY 2012-08-14 03:22:23

1

嘗試代碼的其他方式:

redButtonListener rr =new redButtonListener(); 

redButton.addActionListener(rr); 
1

監聽器需要先創建可以加入之前。請嘗試以下操作:

redButtonListener rr =new redButtonListener(); 
redButton.addActionListener(rr); 

報告中,我們得到一個錯誤,通常仔細閱讀錯誤說我應該給我的,你需要的答案。在這種情況下,它應該告訴你rr沒有被定義,這顯然是因爲當你使用它時,它還不存在。