2011-05-31 38 views
-1

我正在創建一個簡單的文本編輯器,當我打開文件時,我想要更改爲JFrame的標題欄以包含用戶剛剛打開的文件的目錄和文件名。我在JFrame API中使用setTitle(..)方法,但出於某種原因,我得到一個空指針異常。NullPointerException當試圖更改JFrame的標題

public void actionPerformed(ActionEvent ae) 
    { 
    //find out what event occured 
    String command = ae.getActionCommand(); 

    String s = " command: " + command; 
    JOptionPane.showMessageDialog(null, s); 

    if(command.equals("New..")) //the New file option was selected 
    { 
     output.setEditable(true); 
     //createNewFile(); 
     isNew = true; 
    } 
    else if(command.equals("Open.."))//the Open file option was selected 
    { 
     output.setEditable(true); 
     openFile(); 
     //both className and currentFile are defined 
     frame.setTitle(className + ": " + currentFile.toString()); //Exception here 
    } 
    else if(command.equals("Save.."))//the Save file option was selected 
    { 
     saveFile(); 
    } 
    else if(command.equals("Save As.."))//the Save file option was selected 
    { 
     saveFileAs(); 
    } 
    else if(command.equals("Exit.."))//the Exit program option was selected 
    { 
     exitProgram(); 
    } 
    }  

也在這裏是堆棧跟蹤:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at jtexteditor.JTextEditor.actionPerformed(JTextEditor.java:307) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 
at javax.swing.AbstractButton.doClick(AbstractButton.java:357) 
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:809) 
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:850) 
at java.awt.Component.processMouseEvent(Component.java:6288) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) 
at java.awt.Component.processEvent(Component.java:6053) 
at java.awt.Container.processEvent(Container.java:2041) 
at java.awt.Component.dispatchEventImpl(Component.java:4651) 
at java.awt.Container.dispatchEventImpl(Container.java:2099) 
at java.awt.Component.dispatchEvent(Component.java:4481) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) 
at java.awt.Container.dispatchEventImpl(Container.java:2085) 
at java.awt.Window.dispatchEventImpl(Window.java:2478) 
at java.awt.Component.dispatchEvent(Component.java:4481) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643) 
at java.awt.EventQueue.access$000(EventQueue.java:84) 
at java.awt.EventQueue$1.run(EventQueue.java:602) 
at java.awt.EventQueue$1.run(EventQueue.java:600) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) 
at java.awt.EventQueue$2.run(EventQueue.java:616) 
at java.awt.EventQueue$2.run(EventQueue.java:614) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:613) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 

---- jGRASP:操作完成。

任何幫助將是偉大的。 獵人。

+1

哪一行是307行?在那裏檢查並查看您執行調用的其中一個變量是否爲空。否則,調試。 – 2011-05-31 17:43:58

回答

1

您對frame的引用爲空。覈實。

+0

奇怪,我沒有檢查,這絕對不應該爲null,因爲這是我用來創建我的JFrame首先變量。但由於某種原因,它是無效的。 – 2011-05-31 17:48:25

+0

我看到我做了什麼,我正在運行代碼,在EventDispatch線程內創建我的JFrame,所以當我在另一個線程中執行文件操作的「框架」不在該範圍內時。感謝@Martijn的幫助 – 2011-05-31 17:51:27