【发布时间】:2014-11-24 06:50:42
【问题描述】:
我的项目包含 2 个类文件和一个用于使用数据的测试应用程序 GUI 界面。这两个类文件,都是我自己创建的,分别是ToolItem(定义了一个硬件工具有get()和set()方法,display()方法等)和HardWareStore,用来操作数据和放置使用insert()、delete()、searchArray() 等方法将其放入数组中。
包含相同相关按钮(插入、删除)的 GUI 界面在按下相应按钮时调用HardWareStore。
到目前为止,除了删除按钮/delete() 方法外,一切正常。我的方法如下,包括我创建的searchArray() 方法,它在delete() 内部用于评估唯一ID 并确定该ID 是否已经存在:
搜索数组:
public int searchArray(int id)
{
for (index = 0; index < toolArray.length; index++)
{
if (toolArray[index].getToolID() == id)
{
System.out.println("ID found at location " + index);
return index;
}
}
return -1;
}//end searchArray
删除:
public int delete(int ID)
{
testArray = searchArray(ID);
if (testArray != -1)
{
toolArray[testArray].setQuality(0);
toolArray[testArray].setToolName("");
toolArray[testArray].setID(0);
toolArray[testArray].setNumberInStock(0);
toolArray[testArray].setPrice(0.0);
//counter for number of items in array. Array holds 10 objects
numberOfItems--;
//shifting cells
for (index = testArray + 1; index < toolArray.length; index++)
{
toolArray[index - 1] = toolArray[index];
}
toolArray[toolArray.length - 1] = null;
System.out.println("Successful deletion");
return 1;
}
else
System.out.println("ID not found");
return -1;
}//end delete
这是用于在我的测试应用程序中删除数据的相应 GUI 按钮:
else if (ev.getSource() == deleteBtn)
{
input = idFld.getText();
idInput = Integer.parseInt(input);
responseCode = store.delete(idInput);
if (responseCode == 1)
{
messageFld.setText(idInput + " - Successful deletion");
}
else if (responseCode == -1)
{
messageFld.setText(idInput + " - ID not found");
}
}//end delete button
现在,一切都可以正常插入,检测重复的 ID,等等。 delete 方法也有效,让我知道用户传递的 ID 已在 toolArray[index] 以及所有相关数据成员处删除。
当我去显示数组中的项目时发生错误。前 9 项使用 JOptionPane 显示正常,但是当我到达第 10 项时(我的删除方法应该在删除后将所有单元格向左移动)我收到几个运行时错误:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException.
我很确定我的错误始于HardWareStore 中的delete() 方法,特别是我的循环删除和向左移动项目。我已经把它弄乱了几个小时,但我似乎找不到原因,我尝试更改循环要么导致另一个运行时错误,要么该方法的行为不像它应该的那样。
【问题讨论】:
-
delete() 和从数组“get()”中读取是否同时发生?例如在不同的线程上说?
-
我查看了例外列表,但并没有出现。我没有在运行时错误中看到对任何 get() 方法的引用,但我不是 100% 确定:/ 第一个例外是在 searchArray() 和 insert() ,具有讽刺意味的是,这些方法和方法在正常情况下工作正常。只有当我删除一个项目并尝试插入()另一个对象或显示()表示数据时才会发生运行时错误。这就是为什么我认为我移动数组的方式存在问题。
-
我的意思是 get() 准确地说,我的意思是在删除的同时对数组进行任何形式的访问,因为如果你这样删除,同时移动和读取,数据将被损坏,有这个问题之前...stackoverflow.com/questions/24917931/…
-
哦,好吧。好吧,如果有什么我学到了一些东西。感谢您的意见。
标签: java arrays user-interface