2010-08-18 70 views
1

我試圖做一個切換按鈕(F)隱藏或顯示我的聊天區(JTextArea中),這是JScrollPane上(SP)和它不工作...爪哇 - NullPointerException異常

這裏是什麼我做...

我有它設置爲公共...

public JScrollPane sp;

,我把它的init()像這裏面: JScrollPane sp = new JScrollPane(c);

c是JTextArea中....

if (e.getKeyCode() == KeyEvent.VK_F) 
{ 
    if (sp.isVisible()) 
    { 
     sp.setVisible(false); 
    } 
    else 
    { 
     sp.setVisible(true); 
    } 
} 

這是我的錯誤:

Exception in thread "AWT-EventQueue-2" java.lang.NullPointerException 
    at tileGen.keyPressed(tileGen.java:522) 
    at java.awt.Component.processKeyEvent(Unknown Source) 
    at javax.swing.JComponent.processKeyEvent(Unknown Source) 
    at java.awt.Component.processEvent(Unknown Source) 
    at java.awt.Container.processEvent(Unknown Source) 
    at java.awt.Component.dispatchEventImpl(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source) 
    at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source) 
    at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source) 
    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source) 
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source) 
    at java.awt.Component.dispatchEventImpl(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 

這是行522:if (sp.isVisible()) {

我在做什麼錯?

回答

1

爲什麼有兩個sp的聲明?

公共JScrollPane sp;

JScrollPane sp =新JScrollPane的(C);

+0

因此,他可以問一個關於StackOverflow的問題:-) – Douglas 2010-08-18 23:29:16

+0

哦,我想我應該從JScrollPane中取出JScrollPane sp = new JScrollPane(c);! – nn2 2010-08-19 00:01:21

+0

謝謝,這工作! – nn2 2010-08-19 00:02:21

2

---響應編輯,以具有線522 ---

因爲你有JScrollPane sp = new JScrollPane(...);您正在與具有相同名稱的變量隱藏成員變量sp。這意味着一旦離開init()塊,本地定義的sp變量將消失,並且JScrollPane將不會存儲在成員變量sp中。

導致以下....

您認爲成員變量sp被分配到一個對象,但它仍然是零。在調用方法之前,您需要確保成員變量sp不爲null。

---原帖如下 -

看tileGen.java的522線。賠率是你的對象上調用的方法有,像這樣

someObject.setValue(someValue); 

問題是,someObject未設置爲一個對象,它仍然是零。

4

如果您打算設置實例變量,請刪除init()中的JScrollPane sp(該行應該僅爲sp = new JScrollPane(c);)。有了它,你聲明並設置了一個局部變量,並且該對象的sp永遠不會被設置。