出于某种原因,我在下面的代码中收到错误,我看不清楚原因,你能发现任何错误吗?
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)
第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);
答案 0 :(得分:3)
虽然我们正在等待您发布(a)的实际错误,但请花点时间从不这样做:
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
为空。
第三个是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
因为在thingTwo
中设置的someFunction()
是本地版并且不以任何方式设置对象级thingTwo
- 对象级别一个仍然是null
,如果你试图取消引用它,你会看到你遇到的同样问题。
(a) 最佳问题报告附带一个小而完整的代码段,展示了问题,预期行为和实际行为。
如果我们将您的样本发布到裸体Eclipse Java程序中,那么它就非常不完整。 MouseEvent
,delTask
和taskTable
没有定义,如果没有这些信息,则有点难以调试。
此外,Eclipse(用于语法错误)和Java本身(用于运行时错误)完全能够非常详细地告诉您您的问题是什么,并且您应该阅读它告诉您的内容。如果您需要帮助,您还应该将这些信息告知我们: - )
答案 1 :(得分:0)
哪一行是ProjectGUI.java
的第233行?至少下列之一为null:
delTask
taskTable
taskTable.getModel()
找出其中哪些属于第233行(根据您的错误报告),并且您已经找到了问题所在。我们需要查看更多代码来确定变量没有预期值的原因。