我想要做的是非常基本的:我有一个包含按钮的界面;当我按下该按钮时,我希望我的程序从文本文件中读取下一行并将其显示在文本字段中。但没有任何反应,我有一种感觉,因为它没有正确读取我的文件:\请帮助,我是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")};
}
}
答案 0 :(得分:0)
问题是您定义的流在try块中关闭。因此,当您尝试阅读时,Stream会关闭。
答案 1 :(得分:0)
1,数据无法共享,bf在click事件中没有到达
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) {
}
}
});
}
答案 2 :(得分: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);
}
}
});
}
请停止吞噬异常。系统遗嘱告诉你,一旦你掌握了这些信息,那个流就会被关闭,剩下的就很简单了!