簡體   English   中英

Java Swing 按鈕凍結程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM