2012-04-14 185 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