スキャナーに問題があります。ボタンをクリックすると、2 番目のファイルのテキストが表示されます。ボタンは機能しましたが、プログラムは新しいテキストファイルの最後の行に直接スキップします。ロード時間が遅いため、最初のスキャナーを閉じることができないためだと思います。一度に 1 つずつ読み込まれるテキスト ファイルがたくさんあるので、私のレイアウトはそれほど重要ではないと思いますが、2 番目のクラスを内部クラスとして記述すると、事態がさらに複雑になるようです。
2 番目のクラスのスキャナを最初のクラスからアクセスできるようにするにはどうすればよいですか (つまり、 を使用します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) {
}
}
バツ
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) {
}
}