2012-04-14 176 views
0

我有表示各種類型節目體裁(喜劇,戲劇等)的各種類。麻煩與填充的JTable和JTextField的

我充滿了一個文本文件「 - 」分隔的數值是那些獲得一類稱爲處理讀取,並將它們放入一個LinkedList。

我有另一個類GUI_g創建圖形用戶界面。它有2個JTable。一個用於列表,另一個用於頻道。 JTable listTable從鏈接列表中填充,每當用戶單擊一行時,文本字段的文本就會相應地改變。

我試着用5個字段(標題,流派和持續時間,演員,導演)和它的工作,用3個文本框顯示根據點擊哪一行不同的文本。但是,當我添加所有需要的值時,出現錯誤,沒有填充字段。

我有兩個問題:

如果它是一個音樂電影的電池沒有充滿了(因爲它應該是),但它的數據複製到JTextField的 的Snyopsis欄保持空白,不填充時返回錯誤。 下面是類(主要使用的)。如果你需要別人告訴我,我會上傳。

GUI_g:http://pastebin.com/KsZBwgtR ProgramTableModel:http://pastebin.com/6Rc2bVxa 處理:http://pastebin.com/8f8iteVK 計劃:http://pastebin.com/NU3XGvM8

這是錯誤我得到:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at GUI_g$1.mouseClicked(GUI_g.java:205) 
    at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270) 
    at java.awt.Component.processMouseEvent(Component.java:6507) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
    at java.awt.Component.processEvent(Component.java:6269) 
    at java.awt.Container.processEvent(Container.java:2229) 
    at java.awt.Component.dispatchEventImpl(Component.java:4860) 
    at java.awt.Container.dispatchEventImpl(Container.java:2287) 
    at java.awt.Component.dispatchEvent(Component.java:4686) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
    at java.awt.Container.dispatchEventImpl(Container.java:2273) 
    at java.awt.Window.dispatchEventImpl(Window.java:2713) 
    at java.awt.Component.dispatchEvent(Component.java:4686) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) 
    at java.awt.EventQueue.access$000(EventQueue.java:101) 
    at java.awt.EventQueue$3.run(EventQueue.java:666) 
    at java.awt.EventQueue$3.run(EventQueue.java:664) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
    at java.awt.EventQueue$4.run(EventQueue.java:680) 
    at java.awt.EventQueue$4.run(EventQueue.java:678) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 

形象的例子:

enter image description here

回答

1

問題是您的GUI_g類中的第205行(如編譯器所述)。

String actor = listTable.getValueAt(row, column+3).toString(); 

在嘗試使用toString()方法之前,您沒有檢查或清除輸入值。

你不能爲空值使用過程中的方法。

您需要檢查所有輸入(不只是這一個)。既然你有很多領域,你應該做一個幫助方法/類來爲你做,並返回一個乾淨的輸入。

如果你只是想快速解決這個問題一個,這樣做:

String actor = " "; 
T input = listTable.getValueAt(row, column+3); 
if (input != null) actor = input.toString(); 
return actor; 

替換「T」與任何對象,你試圖檢查。

+0

你能否解釋一下我應該用什麼來代替'T'?我不太明白 – Brian 2012-04-14 20:44:56

+0

@Brian:toString()方法是一個java.lang.Object方法,因此它可以屬於任何對象。我沒有打擾通過你的代碼來找到listTable.getValueAt(...)引用的方法,但是無論你從那個方法返回哪個對象 - 你只需要將T設置爲該類型(T代表類型, BTW)。 – Ozzy 2012-04-14 20:51:06

+0

啊好吧謝謝。也..爲什麼不是每個對象的概要場? – Brian 2012-04-14 20:55:55