【发布时间】:2014-04-09 19:02:09
【问题描述】:
我必须做一个测验课,它会从文本文件中读取问题,我一直试图让程序以这样的方式工作,每次按下答案按钮时它都会读取下一个问题(文本中的行文件),我尝试了许多来自互联网的建议,但我得到的最远的是在程序运行时读取第一行,然后在按下按钮时使用String[] args = new String[0]; 有一个新框架,但是文本根本不会读取.
这是我的代码:
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Frame {
JFrame frame;
JPanel pan1;
static JButton boutonRetour,boutonEnregistrer;
static JTextField reponse,question;
static int counter1 = 1;
static int lines=0;
public static void main(String[] args) {
final JFrame frame = new JFrame("Frame");
frame.setSize(700,600);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
question=new JTextField(10);
question.setBounds(150, 220, 450, 50);
question.setEditable(true);
frame.setContentPane(new JPanel() {
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(null, 0, 0, 700, 600, this);
}
});
boutonEnregistrer=new JButton("Answer");
boutonEnregistrer.setBounds(0,513,100,50);
boutonEnregistrer.setBackground(new Color(0, 0, 182));
boutonEnregistrer.setForeground(Color.white);
boutonEnregistrer.setFocusPainted(false);
boutonEnregistrer.setFont(new Font("Tahoma", Font.BOLD, 12));
boutonEnregistrer.addActionListener(new ActionListener(){
public void actionPerformed (ActionEvent e){
counter1++;
String[] args = new String[0];
main(args);
/*
SwingUtilities.updateComponentTreeUI(frame);
frame.revalidate();
frame.repaint();
frame.removeAll();
frame.invalidate();
frame.validate();
*/
}
});
frame.add(question);
frame.add(boutonEnregistrer);
frame.setLayout(null);
System.out.println(counter1);
try {
BufferedReader br =
new BufferedReader(new FileReader("Questions.txt"));
String word = null;
while((word =br.readLine()) != null) {
lines++;
if (lines == counter1){
question.setText(word);
break;
}
}
} catch(IOException err) {
}
frame.validate();
System.out.println(lines);
};
}
【问题讨论】:
-
你的文字根本看不懂是什么意思?此外,您应该在 catch 块中打印堆栈跟踪 (err.printStackTrace()),以便您至少知道有错误。
-
程序第一次运行时,它会读取第一行并将其显示在 jtextfield 上,但是当我按下按钮时,会打开一个新框架,但文本字段上没有显示任何文本...我添加了 err.printStackTrace() 但没有错误只是没有按照我需要的方式工作
-
尝试关闭 BufferedReaders。在 finally 块中调用
br.close()。可能会出现问题,因为 BufferedReader 的第二个实例可能正在等待第一个流关闭。 -
你用什么来编译你的程序?您的代码中有语法错误(不匹配的
*/)。会不会是类文件没有更新? -
我用 br.close() 添加了 finally 块;在它上面我有一个找不到符号,我也尝试将它放在 while 循环之后,但它没有改变任何东西......我在我的程序中使用 netbeans 匹配的 /* 就在 SwingUtilities.updateComponentTreeUI(frame);行,必须在编辑帖子时将其删除
标签: java swing file-io jbutton bufferedreader