【问题标题】:Trying to read from a file. Throws an exception试图从文件中读取。抛出异常
【发布时间】:2010-12-02 16:36:38
【问题描述】:

我试图从一个包含单个垂直数字文件的文件中读取,并用它们填充一个矩阵(由JTextFields 组成),但是当我尝试 set 方法时,程序在更改后抛出异常到第二行

for(int a=0; a < i; a++) { 
    for(int b=0; b < i; b++){
        // x = raf.readLine();
        matrix[a][b].setText(raf.readLine());
    }
}

【问题讨论】:

  • 您看到了什么异常,您能否提供堆栈跟踪。
  • 什么是 raf?我是什么?什么是矩阵?多一点代码和/或堆栈跟踪会有所帮助...
  • 解决了!问题是我在第二个“for”完成后立即执行 raf.close()。
  • 所以,请:要么接受其中一个答案,要么自己提供一个有效答案并接受(或删除问题)

标签: java swing file-io matrix


【解决方案1】:

您不应该从 GUI 类中读取文件。尝试通过创建一个专门的类来读取文本文件来分离关注点。也许让你的文件阅读器类返回一个Iterator&lt;String&gt; 行。现在在单元测试中测试您的文件阅读器类,并确保它正确显示行。

然后做这样的事情:

Iterator<String> lines = yourHelperClass.getLines()
for(int a=0; a < i; a++) { 
    for(int b=0; b < i; b++){
        if(!lines.hasNext()){
            // not enough lines, probably throw an Exception here
        }
        matrix[a][b].setText(lines.next());
    }
}

这样会更容易找出实际出了什么问题。

推荐阅读:Coupling and Cohesion: The Two Cornerstones of OO Programming

【讨论】:

  • +1 关于凝聚力的好点子。维度元数据应保留在数据本身附近。
  • 解决了!问题是我在第二个“for”完成后立即执行 raf.close()。
【解决方案2】:

您可能想要更类似于以下示例的内容,为WIDTHHEIGHT 使用一些合适的值。

for (int row = 0; row < HEIGHT; row++) {
    for (int col = 0 ; col < WIDTH; col++) {
        matrix[row][col].setText(raf.readLine());
    }
}

【讨论】:

  • 解决了!问题是我在第二个“for”完成后立即执行 raf.close()。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-18
  • 2018-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多