[英]Java Swing button freezes program
我在 Swing 中編寫了一個簡單的應用程序,用於將文本寫入文件。 這是我的主要課程:
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class WritingTextToFileApp {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new MainFrame("Application");
frame.setSize(500, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
這是另一個類:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class MainFrame extends JFrame {
public MainFrame(String title) {
super(title);
//Set Layout Manager
setLayout(new BorderLayout());
//Create Swing Components
JTextArea textArea = new JTextArea();
JButton button = new JButton("Add");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
File file = new File("C:\\Users\\Vincent Wen\\Desktop\\Test.txt");
try (BufferedWriter br = new BufferedWriter(new FileWriter(file))) {
br.write(input);
br.newLine();
} catch (IOException ex) {
System.out.println("Unable to write to file:" + file.toString());
}
}
});
//Add Swing components to conent pane
Container c = getContentPane();
c.add(textArea, BorderLayout.CENTER);
c.add(button, BorderLayout.SOUTH);
}
}
每當我按下按鈕時,程序就會凍結,什么也沒有發生。 代碼有問題嗎? 我是 Swing 的新手,所以任何幫助將不勝感激。
Swing 在處理 GUI 輸入和呈現的同一線程中同步運行這些操作。 這意味着當您單擊按鈕時,它會等待動作偵聽器完成運行,然后再返回處理輸入和繪制 GUI。 在這種情況下,它會有效地阻止 GUI 運行,直到您在控制台中鍵入內容為止。
您可以使用SwingWorker異步運行它,以便它在運行操作時繼續運行 GUI。
問題是當您按下按鈕時,java 期望從 System.ini(控制台)讀取數據。
嘗試在控制台上使用 java 命令來啟動您的應用程序。 然后在按下按鈕后在控制台中輸入一些文本並按回車。 你的程序你工作。
我通過使用 textArea.getText() 而不是使用掃描儀解決了我的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.