ホームページ >Java >&#&チュートリアル >Javaでバッチファイルを実行中に不定の進行状況バーを表示するにはどうすればよいですか?

Javaでバッチファイルを実行中に不定の進行状況バーを表示するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-06 07:45:12466ブラウズ

How to Display an Indeterminate Progress Bar While Running a Batch File in Java?

バッチ ファイルの実行中に不確定な進行状況バーを表示する

デスクトップ アプリケーションでは、長時間のタスクの実行中にユーザーに視覚的なフィードバックを提供することが重要です。進行中。バックグラウンドでバッチ ファイルを実行すると、よくある問題が発生します。画面がアイドル状態に表示され、プログラムがまだ実行されているかどうかがユーザーにわかりません。これに対処するには、不定の進行状況バーを表示すると混乱が軽減され、ユーザー エクスペリエンスが向上します。

Swing の課題

Swing は人気のある Java GUI ツールキットですが、次のような問題に直面しています。複数のプロセスを処理し、非 EDT スレッドから UI 要素を更新する場合の制限。 SwingWorker を使用してバックグラウンドでタスクを実行することは可能ですが、バッチ ファイルの出力を処理するように設計されていません。

ProcessBuilder を使用したより良いソリューション

ProcessBuilderより堅牢なアプローチを提供します。 ProcessBuilder.start() を使用してバッチ ファイルをバックグラウンドで実行し、その進行状況を監視し、標準ストリームを通じて出力を取得できます。さらに、SwingWorker を実装すると、EDT スレッドからプログレス バーを更新して、応答性の高い GUI を確保できます。

実装例

次のコード例は、その方法を示しています。 ProcessBuilder を SwingWorker とともに使用して、バッチ ファイルの実行中に不確定の進行状況バーを表示するには:

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.swing.*;

public class BatchFileProgress {

    private final JLabel statusLabel = new JLabel("Status: ", JLabel.CENTER);
    private final JTextArea textArea = new JTextArea(20, 20);
    private JButton startButton = new JButton("Start");
    private JButton stopButton = new JButton("Stop");
    private JProgressBar bar = new JProgressBar();
    private BackgroundTask backgroundTask;
    private final ActionListener buttonActions = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent ae) {
            JButton source = (JButton) ae.getSource();
            if (source == startButton) {
                textArea.setText(null);
                startButton.setEnabled(false);
                stopButton.setEnabled(true);
                backgroundTask = new BackgroundTask();
                backgroundTask.execute();
                bar.setIndeterminate(true);
            } else if (source == stopButton) {
                backgroundTask.cancel(true);
                backgroundTask.done();
            }
        }
    };

    private void displayGUI() {
        JFrame frame = new JFrame("Batch File Progress");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JPanel panel = new JPanel();
        panel.setBorder(
            BorderFactory.createEmptyBorder(5, 5, 5, 5));
        panel.setLayout(new BorderLayout(5, 5));

        JScrollPane sp = new JScrollPane();

以上がJavaでバッチファイルを実行中に不定の進行状況バーを表示するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。