2011-11-02 49 views
0

由於某種原因,我在下面的代碼中收到錯誤,我看不出爲什麼,你能發現任何錯誤嗎?有錯誤但我看不到在哪裏

public void delTask_mouseClicked(MouseEvent e) 
{ 
    if(delTask.isEnabled() == false) { 
     int numTasks = taskTable.getRowCount(); 
     Object[] currentTasks; 
     currentTasks = new Object[numTasks]; 
     for (int i = 0; i < numTasks ; i++){ 
      Object tasks = taskTable.getModel().getValueAt(i, 1); 
      currentTasks[i] = tasks; 
     } 
     System.out.println(currentTasks); 
    } 
} 

感謝您的幫助,真的很感激。

我得到的錯誤有大量的塊低於:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at projecttaskmanagement.ProjectGUI.delTask_mouseClicked(ProjectGUI.java:233) 
at projecttaskmanagement.ProjectGUI$2.mouseClicked(ProjectGUI.java:109) 
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:212) 
at java.awt.Component.processMouseEvent(Component.java:5520) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3135) 
at java.awt.Component.processEvent(Component.java:5282) 
at java.awt.Container.processEvent(Container.java:1966) 
at java.awt.Component.dispatchEventImpl(Component.java:3984) 
at java.awt.Container.dispatchEventImpl(Container.java:2024) 
at java.awt.Component.dispatchEvent(Component.java:3819) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3901) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822) 
at java.awt.Container.dispatchEventImpl(Container.java:2010) 
at java.awt.Window.dispatchEventImpl(Window.java:1791) 
at java.awt.Component.dispatchEvent(Component.java:3819) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463) 
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110) 

CODE AT LINE 233: INT numTasks = taskTable.getRowCount();

任務表定義如下:

String[] taskcolumnNames = {"ID #", 
      "Name", 
      "Description", 
      "Start Date", 
      "End Date", 
      "Staff", 
      "Completed"}; 
    Object[][] taskdata = { 
      {new Integer(1), "Requirements Analysis", 
      "Analysing the requirements", 
      "01/09/2011", "15/10/2011", 
      "Bob", new Boolean(true)}, 
      {new Integer(2), "System Design", 
      "Designing the System", 
      "15/09/2011", "15/10/2011", 
      "Alice", new Boolean(true)}, 
      {new Integer(3), "Code (A)", 
      "Part 'A' of coding", 
      "01/10/2011", "15/11/2011", 
      "David", new Boolean(true)}, 
     }; 
    JTable taskTable = new JTable(taskdata, taskcolumnNames); 
+1

你會得到什麼錯誤? –

+0

@ ron8:_where_是否創建了taskTable?這是缺失信息的關鍵部分(請參閱我爲什麼回答的更新)。 – paxdiablo

回答

3

雖然我們等着你來發布你得到(一),請花點時間NEVER做到這一點實際的錯誤:

if (delTask.isEnabled() == false) 

一個更好的形式是簡單閱讀:

if (! delTask.isEnabled()) 

我們現在返回到您的預定編程,等待您的更新。


Dum de dum de dum ... 

現在,根據您的更新,該STACKDUMP的以下部分:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at projecttaskmanagement.ProjectGUI.delTask_mouseClicked(ProjectGUI.java:233) 

指出問題所在。在233行中找出你的那些行,並且你有它。事實上,你試圖尊重這條線實際上是一個空引用。

基於該片段中,它可能會是以下行之一:

public void delTask_mouseClicked(MouseEvent e) 
{ 
    if(delTask.isEnabled() == false) {       // <-- 
     int numTasks = taskTable.getRowCount();     // <-- 
     Object[] currentTasks; 
     currentTasks = new Object[numTasks]; 
     for (int i = 0; i < numTasks ; i++){ 
      Object tasks = taskTable.getModel().getValueAt(i, 1); // <-- 
      currentTasks[i] = tasks; 
     } 
     System.out.println(currentTasks); 
    } 
} 

第一個將因爲delTask本身爲空,第二個如果taskTable爲null。

第三種情況是,如果taskTable本身有效,但從其getModel()方法返回的值爲空。


因此,看起來您的taskTable爲空。至於爲什麼這是如此,這是不可知的基於當前的信息。你需要做的是檢查它被設置爲有效值的所有地方,並確保你在之前發生(或者更有可能的是,在你的用戶控制下的AWT)調用此方法。

當然,確保它在創建後的某個時刻不會回到NULL。

如果不能保證,你可能需要改變:

if (delTask.isEnabled() == false) 

成類似:

if ((! delTask.isEnabled()) && (taskTable != NULL)) 

,但我更傾向於將修復的根本原因的問題,而不是應用這種創可貼。

您的代碼創建JTable似乎沒問題(語法上),但有的輕微謎,其中完成。它的創建方式可以從您嘗試使用它的位置開始使用。例如,如果創建它的代碼位於構造函數內,則該特定的taskTable對於所述構造函數是局部的(並在退出時被銷燬),而不能在其他地方使用。在這種情況下,需要將其設置爲對象級別的變量,以便其他方法可以實現。

你可以看到下面的程序,效果:

public class testprog { 
    public Object thingOne; 
    public Object thingTwo; 

    public void someFunction() { 
     thingOne = new Object(); 
     Object thingTwo = new Object(); 
    } 

    public void debug() { 
     if (thingOne == null) 
      System.out.println ("thingOne is NULL"); 
     else 
      System.out.println ("thingOne is valid"); 
     if (thingTwo == null) 
      System.out.println ("thingTwo is NULL"); 
     else 
      System.out.println ("thingTwo is valid"); 
    } 

    public static void main(String args[]) { 
     testprog tp = new testprog(); 
     tp.someFunction(); 
     tp.debug(); 
    } 
} 

此輸出:

thingOne is valid 
thingTwo is NULL 

因爲thje thingTwosomeFunction()成立是本地版本和不以任何方式不設置對象級別thingTwo - 對象級別仍爲null,如果嘗試對其進行解引用,則會看到與您遇到的問題相同的問題。


(一)最好問題的報道都配有小的,完整的代碼片段出現該問題,預期的行爲,並實際行爲。

如果我們將您的樣本發佈到裸露的Eclipse Java程序中,那麼它非常不完整。 MouseEvent,delTasktaskTable沒有定義,沒有這些信息,調試有點困難。另外,Eclipse(用於語法錯誤)和Java本身(用於運行時錯誤)完全能夠非常詳細地告訴你你的問題是什麼,並且你應該閱讀它告訴你的內容。如果您需要幫助,您還應該將此信息傳達給我們:-)

+0

感謝您指出。簡單得多。 – ron8

+0

代碼行233:int numTasks = taskTable.getRowCount(); – ron8

0

哪一行是ProjectGUI.java的第233行?至少下列條件之一爲空:

  • delTask
  • taskTable
  • taskTable.getModel()

找出哪些線233(根據你的錯誤報告)那些跌倒的。而你找出問題所在。我們需要查看更多代碼來確定變量爲什麼沒有預期值。

+0

第233行:int numTasks = taskTable.getRowCount(); – ron8

+1

這表明'taskTable'爲空。它試圖在一個不存在的對象上調用'getRowCount()'函數。在哪裏以及如何定義'taskTable'? –

+0

只需將其添加到原始問題。感謝您的幫助:D – ron8

相關問題