Java 按下按钮时读一行

Java 按下按钮时读一行,java,swing,file-io,jbutton,bufferedreader,Java,Swing,File Io,Jbutton,Bufferedreader,我必须做一个测验课,从文本文件中读取问题,我一直试图让程序以这样的方式工作,每次按下回答按钮,它都会读取下一个问题(文本文件中的行),我尝试了许多来自互联网的建议,但我得到的最多的建议是在程序运行时阅读第一行,然后使用String[]args=newstring[0]在按下按钮时有一个新的帧,但是文本根本无法读取 这是我的密码: import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.a

我必须做一个测验课,从文本文件中读取问题,我一直试图让程序以这样的方式工作,每次按下回答按钮,它都会读取下一个问题(文本文件中的行),我尝试了许多来自互联网的建议,但我得到的最多的建议是在程序运行时阅读第一行,然后使用
String[]args=newstring[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;
}


您可以使用
lines
变量来跟踪最后一行的读取。然而,这并没有发生在您的代码中。while循环始终运行,直到读卡器达到EOF

阅读所需行后,应断开循环:

if (lines == counter1){
    question.setText(word);
    break;
}

你说这篇文章根本不读是什么意思?此外,您还应该在catch块中打印堆栈跟踪(err.printStackTrace()),以便至少知道有错误。程序第一次运行时,它会读取第一行并在jtext字段中显示,但是当我按下按钮时,一个新的帧打开了,但是文本字段上没有显示任何文本…我添加了err.printStackTrace(),但是没有错误,只是没有按照我需要的方式来关闭你的BufferedReaders。在finally块中调用
br.close()
。出现问题的原因可能是BufferedReader的第二个实例可能正在等待第一个流关闭。您使用什么来编译程序?代码中存在语法错误(不匹配的
*/
)。可能是类文件没有更新吗?我用br.close()添加了一个finally块;在它上面我有一个找不到的符号,我也试着把它放在while循环之后,但它没有改变任何东西…我在我的程序上使用netbeans匹配的/*正好在SwingUtilities.updateComponentTreeUI(frame)之前;行,一定是在编辑帖子时删除的谢谢!!现在jtextfield不再是空的…但是它总是显示同一行(第一行),即使计数器和行号为5或20,您编辑问题的代码也不正确。您需要
中断语句将位于if块中。目前它不是,在循环的一次迭代后它正在中断。
if (lines == counter1){
    question.setText(word);
    break;
}