我一直在制作GUI程序,我正在调用抛出异常的方法。我必须使用try和catch,因为我无法编辑代码,因为它的GUI。由于某种原因,代码不起作用。该代码应该获取文件的第一行并在标签中显示该数字。这是代码:
try{
String inputStr = JOptionPane.showInputDialog(this, "Enter The File Name: ");
int x= codeReadFile(inputStr);
String name= String.valueOf(x);
chipCount.setText(name);
}
catch (IOException e) {
JOptionPane.showMessageDialog(this,"No File");
}
文件阅读程序的代码是:
public static int codeReadFile (String filename) throws IOException,
FileNotFoundException {
String line=null;
int value=0;
BufferedReader inputReader = new BufferedReader (new
InputStreamReader(new FileInputStream(filename)));
while (( line = inputReader.readLine()) != null)
value = Integer.parseInt(line);
inputReader.close();
return value;
答案 0 :(得分:1)
你说你想得到文件的第一行,但是这段代码显然没有这样做:
while (( line = inputReader.readLine()) != null)
value = Integer.parseInt(line);
它尝试读取整个文件并将每一行解析为int
,丢弃除最后一行之外的所有值。您可能想说的是
line = inputReader.readLine();
return line != null? Integer.parseInt(line) : 0;
您应该拥有此类代码您的文件是否实际上只包含一行。例如,如果文件包含额外的换行符,您将读取一个空行,尝试解析它,并获得NumberFormatException
。
答案 1 :(得分:0)
应始终在EDT(事件调度线程)上调用GUI操作。您可以通过将修改代码包装到某个位置来实现。像:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
chipCount.setText(name);
}
});
否则可能会发生丑陋的事情;)
然后还有一种更简单的方法来检索BufferedReader
。只需删除流并使用FileReader
代替。
最后一件事是:如果您的文件只包含一行,请只读一行。
你正在做的是阅读所有的线条。如果最后一个是空的,那么parseInt()
会得到错误的结果甚至是NumberFormatException。
作为另一种方法,您可以在设置文本后尝试在chipCount和/或其父级上调用repaint()
或invalidate()
。
修改强>
我刚刚读到你想要在标签中显示它...然后重新绘制绝对是要走的路。您也可以使用JTextField
并使其无法使用以摆脱这种情况。