0

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

package practice;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.InputStreamReader;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;

public class MyApp extends JFrame {
    JButton button;
    JTextArea afisaj; 

    MyApp(){ 
        setTitle("MyApp");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        init();
        setSize(500,500);
        setLocationRelativeTo(null); 
        setVisible(true); 
    }

    public void init(){
        this.setLayout(null);

        button = new JButton("Read more");
        afisaj = new JTextArea();

        button.setBounds(200,50,100,30); 
        add(button); 

        afisaj.setBounds(40,100,400,300);
        add(afisaj); 
    }

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

    File f = new File("C:\\myfile.txt");
    BufferedReader b = new BufferedReader(new InputStreamReader(System.in));   
    try{
    b = new BufferedReader(new FileReader(f));  
    }
    catch (FileNotFoundException e){System.out.println("error 1")}

    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 ee){System.out.println("error 2")}   
      }      
    }); 

    try{
    bf.close(); 
    }
    catch (Exception e1){System.out.println("error 3")}; 

}

}
4

3 回答 3

0

当您关闭窗口时,您应该关闭流。现在,在为按钮注册事件侦听器后将其关闭。在你真正按下按钮之前。

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);
      }
    }
  });
}

请停止吞咽异常。系统会告诉您,该流已关闭,其余的非常简单,只要您掌握了该信息!

于 2013-09-22T09:33:00.360 回答
0

问题是您定义的流在 try 块中关闭。因此,当您尝试阅读时,它会关闭 Stream。

于 2013-09-22T09:18:23.790 回答
0

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) {
            }
        }
    });
}
于 2013-09-22T09:18:50.170 回答