【问题标题】:Trouble with populating JTable and JTextFields填充 JTable 和 JTextField 的问题
【发布时间】:2012-04-26 17:54:54
【问题描述】:

我有代表不同类型节目类型(喜剧、戏剧等)的各种课程。

我有一个用“-”分隔值填充的文本文件,这些值被一个名为 Processing 的类读取,并将它们放入 LinkedList。

我有另一个创建 GUI 的类 GUI_g。它有 2 个 JTable。一个用于列表,1 个用于通道。 JTable listTable 从linkedlist 中填充,每当用户单击一行时,文本字段的文本都会相应更改。

我尝试了 5 个字段(标题、流派和时长、演员、导演)并且它起作用了,3 个文本字段根据单击的行显示不同的文本。但是,当我添加所有需要的值时,会出现错误并且没有填写任何字段。

我有两个问题:

如果是 MusicVideo,则单元格未填满(应该如此),但是在将数据复制到 JTextFields 时会返回错误 Snyopsis 列保持为空且未填充。 以下是类(主要使用的类)。如果你需要其他人告诉我,我会上传。

GUI_g:http://pastebin.com/KsZBwgtR 程序表型号: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)

图片示例:

【问题讨论】:

    标签: java user-interface nullpointerexception awt


    【解决方案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”。

    【讨论】:

    • 你能解释一下我应该用什么来代替'T'吗?我不太明白
    • @Brian : toString() 方法是一个 java.lang.Object 方法,因此它可以属于任何对象。我没有费心通过您的代码来查找 listTable.getValueAt(...) 引用的方法,但是无论您从该方法返回哪个对象 - 您只需将 T 设置为该类型(T 代表类型,顺便说一句)。
    • 啊,好的,谢谢。还有..为什么没有每个对象的概要字段?
    • 我尝试执行此代码if (listTable.getValueAt(row, column+8) == null) { etc }。但它没有工作
    • @Brian 很抱歉,如果不筛选您的整个代码或编译它,我将无法知道这一点(这两者我都不会被打扰,不会冒犯)。你有几个选择; 1)编辑您的答案并仅发布与您的问题相关的代码,以便有人更有可能为您调试它或 2)为您的问题创建一个 SSCCE(简短、可编译的程序示例,其中包含与问题无关的所有代码out) 然后发布一个新问题。
    猜你喜欢
    • 2015-06-19
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 2018-12-14
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多