尝试捕捉java

时间:2012-12-11 19:04:27

标签: java user-interface try-catch

我一直在制作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;

2 个答案:

答案 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并使其无法使用以摆脱这种情况。