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 is closed と表示されます。

于 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 に答える