0

我的扫描仪出现问题。单击该按钮,应显示第二个文件中的文本。我让按钮工作了,但是程序直接跳到新文本文件的最后一行。由于加载时间很慢,我认为这是因为我无法关闭我的第一台扫描仪。我不认为我的布局对事情有很大帮助,因为一次会读取很多文本文件,但是将第二个类编写为内部类会使事情看起来更加复杂。

如何使第二类的扫描仪可以访问第一类(因此,使用reader.close())?我应该使用嵌套/内部类来启动程序吗?是否有一种更简洁的方法来启动程序,然后为扫描仪准备好以后的操作?

最后,我一直在努力符合 SSCCE,我接近了吗?谢谢你的帮助

import declarations
public class MihatteFrame extends JFrame implements ActionListener{
....
public MihatteFrame() {
    area
    textfield
    button  
}
displayText method
checkTextFieldText method

public void actionPerformed(ActionEvent e) {
    try {
        if (textField.getText().equals("proceed to the entrance")) {
            Scanner.close();
            Scanner reader2 = new Scanner(new File("(Start) Front Gate.txt"));
            while (reader2.hasNextLine()) {
                String line = reader2.nextLine();
                displayText(line);
                try {
                    if(!line.trim().equals("")){
                                Thread.sleep(1000);
                        }
                    } catch (InterruptedException e) {
                    }   
            }
        } else {
            while (textField.getText() == null) {
                displayText("I`m sorry, could you say that again?");
            }
        }
    } catch (IOException ioe) {
    }
}

X

import declarations
class ShowIntro {
public static void main(String args[]) throws IOException {
MihatteFrame mf = new MihatteFrame();
Scanner reader = new Scanner(new File("(Start) Introduction.txt"));

while (reader.hasNextLine()) {
    String line = reader.nextLine();
    mf.displayText(line);
    try {
        if(!line.trim().equals("")){
        Thread.sleep(1000);
            }
    } catch (InterruptedException e) {
    }       
}
4

1 回答 1

2

GUI 线程仅在您从它调用您的事件中返回时执行操作。这意味着如果你做了很多动作,你只会看到这些动作的累积,如果你因为任何原因暂停,你的 GUI 也会暂停。

您需要在另一个线程中执行该操作,以便 GUI 线程可以更新屏幕。您还需要使用 SwingUtils.invokeLater() 从第二个线程更新 GUI。

于 2013-01-14T10:30:41.723 回答