为什么';这个java代码不能工作吗?

为什么';这个java代码不能工作吗?,java,file-io,interface,exception-handling,Java,File Io,Interface,Exception Handling,我想做的是非常基本的:我有一个包含按钮的界面;当我按下该按钮时,我希望我的程序从文本文件中读取下一行,并将其显示在文本字段中。但是什么也没发生,我有一种感觉,这是因为它没有正确读取我的文件:\Please help,我是Java世界的一个完全的新手,我甚至很高兴我摆脱了编译器错误(耶我!),但这更糟,因为现在我不知道用谷歌搜索什么:) 问题是您定义的流在try块中被关闭。所以,当你们试图读取它时,它给出的流是关闭的 1、数据无法共享,点击事件中的bf无法访问 final BufferedRead

我想做的是非常基本的:我有一个包含按钮的界面;当我按下该按钮时,我希望我的程序从文本文件中读取下一行,并将其显示在文本字段中。但是什么也没发生,我有一种感觉,这是因为它没有正确读取我的文件:\Please help,我是Java世界的一个完全的新手,我甚至很高兴我摆脱了编译器错误(耶我!),但这更糟,因为现在我不知道用谷歌搜索什么:)


问题是您定义的流在try块中被关闭。所以,当你们试图读取它时,它给出的流是关闭的

1、数据无法共享,点击事件中的bf无法访问

final BufferedReader bf = b; 
2、 代码修改如下,以实现您的结果

public static void main(String[] args) {
    final MyApp m = new MyApp();
    m.button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            File f = new File("C:\\myfile.txt");
            BufferedReader b = new BufferedReader(new InputStreamReader(
                    System.in));
            try {
                b = new BufferedReader(new FileReader(f));
            } catch (FileNotFoundException ee) {
            }

            String s = new String();
            try {
                while ((s = b.readLine()) != null) {
                    m.afisaj.append(s);
                }
                b.close();
            } catch (Exception ee) {
            }
        }
    });
}

当你关上窗户时,你应该关上小溪。现在,在为按钮注册事件侦听器后关闭它。在你真正按下按钮之前

public static void main(String[] args) throws Exception {
  final MyApp m = new MyApp();

  File f = new File("myfile.txt");
  BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
  b = new BufferedReader(new FileReader(f));

  final BufferedReader bf = b;

  m.button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
      String s = new String();
      try {
        if ((s = bf.readLine()) != null) {
          m.afisaj.append(s);
        }
      } catch (Exception ex) {
        throw new RuntimeException(ex);
      }
    }
  });

  m.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(WindowEvent e) {
      try {
        bf.close();
      } catch (Exception ex) {
        throw new RuntimeException(ex);
      }
    }
  });
}

请停止吹嘘例外情况。一旦你有了这些信息,系统就会告诉你,这个流是关闭的,其余的都很简单

步骤1:不要接受异常。至少要把它们打印出来,这是一个很好的建议,但我更喜欢(明确地)stacktrace,因为它提供了极好的细节。OP-将形式为
catch(异常e){..
的代码更改为
catch(异常e){e.printStackTrace();//非常有用!
ook,我得到了前两个错误。但我不知道为什么:(一般建议:1)对于帧定位,不能通过
setLocationByPlatform(true)进行
。请参见演示。2)Java GUI可能必须在多个平台上工作,使用不同的屏幕分辨率和不同的PLAF。因此,它们不利于组件的精确放置。要组织组件以获得一个健壮的GUI,请使用布局管理器,或者,使用布局填充和边框……3)不要设置顶级容器的大小。请改为布局内容并调用
pack()
.4)始终复制/粘贴错误和异常输出。将其添加为。
public static void main(String[] args) throws Exception {
  final MyApp m = new MyApp();

  File f = new File("myfile.txt");
  BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
  b = new BufferedReader(new FileReader(f));

  final BufferedReader bf = b;

  m.button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
      String s = new String();
      try {
        if ((s = bf.readLine()) != null) {
          m.afisaj.append(s);
        }
      } catch (Exception ex) {
        throw new RuntimeException(ex);
      }
    }
  });

  m.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(WindowEvent e) {
      try {
        bf.close();
      } catch (Exception ex) {
        throw new RuntimeException(ex);
      }
    }
  });
}