【发布时间】:2017-04-01 00:16:06
【问题描述】:
这里有一个有趣的小错误,希望有人能指出我发生了什么。
如果 JTable 中有大约 4 个或更少的条目,我的程序能够写入文本文件。一旦不止于此,它就会失败并抛出一个弹出我的 catch 块的异常。不知道发生了什么。
public void actionPerformed(ActionEvent e)
{
try
{
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("payrollData.txt"));
PrintWriter fileWriter = new PrintWriter(bufferedWriter);
for(int i = 0; i < outputTable.getRowCount()+1; i++)
{
String headers = String.valueOf(outputTable.getColumnName(i));
fileWriter.print(headers);
fileWriter.print("\t");
}
fileWriter.println("");
for(int i=0; i<model.getRowCount(); ++i)
{
for(int j=0; j<model.getColumnCount(); ++j)
{
String s = model.getValueAt(i,j).toString();
fileWriter.print(s);
fileWriter.print("\t\t");
}
fileWriter.println("");
}
fileWriter.close();
JOptionPane.showMessageDialog(null, "Success. File saved to payrollData.txt");
}catch(Exception ex)
{
JOptionPane.showMessageDialog(null, "Failure");
}
编辑:添加 ex.printStackTrace();它显示了一个数组索引越界异常
【问题讨论】:
-
如果您停止吃异常并阅读错误消息,您就会知道为什么。您正在丢弃它会为您提供的所有信息,以便仅显示“失败”。你认为
Exception ex到底是什么意思?这意味着您将收到名为ex的变量中的异常对象,并且该对象包含有关异常的信息。使用它。 -
向异常添加了 printStackTrace 行,它弹出了一个 arrayIndexOutofBounds 异常 4>=4
-
堆栈跟踪会准确地告诉您是哪一行代码引发了异常。因此,在该行设置断点并在调试器中单步执行您的代码,观察变量值,并找出您超出数组边界的原因。我们不能为您这样做,因为我们没有您的其余代码或您正在使用的文件来进行设置。不像无效索引是20亿;它是 4,这意味着您只需在代码失败时单步执行 4 次即可通过。
-
我实际上没有调试器。你会推荐一个吗?
-
我猜是
i < outputTable.getRowCount()+1,特别是+ 1,因为大多数数组和列表都是从零开始的(意味着有效索引是从0到1)和@987654326 @ 超出限制。删除+ 1看看是否一切正常。