2010-08-18 72 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永远不会被设置。