Maison > Java > javaDidacticiel > Comment afficher une barre de progression indéterminée lors de l'exécution d'un fichier batch en Java ?

Comment afficher une barre de progression indéterminée lors de l'exécution d'un fichier batch en Java ?

Susan Sarandon
Libérer: 2024-12-06 07:45:12
original
458 Les gens l'ont consulté

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

Affichage d'une barre de progression indéterminée lors de l'exécution d'un fichier batch

Dans les applications de bureau, il est crucial de fournir un retour visuel aux utilisateurs lorsque des tâches longues sont en cours. Lors de l'exécution de fichiers batch en arrière-plan, un problème courant survient : l'écran apparaît inactif, laissant les utilisateurs ne sachant pas si le programme est toujours en cours d'exécution. Pour résoudre ce problème, l'affichage d'une barre de progression indéterminée peut atténuer la confusion et améliorer l'expérience utilisateur.

Défis liés à Swing

Swing est une boîte à outils d'interface graphique Java populaire, mais elle est confrontée à limitations lors de la gestion de plusieurs processus et de la mise à jour des éléments de l'interface utilisateur à partir de threads non EDT. Bien qu'il soit possible d'utiliser un SwingWorker pour exécuter des tâches en arrière-plan, il n'est pas conçu pour gérer la sortie du fichier batch.

Une meilleure solution utilisant ProcessBuilder

ProcessBuilder propose une approche plus robuste. Vous pouvez exécuter le fichier batch en arrière-plan à l'aide de ProcessBuilder.start(), puis surveiller sa progression et obtenir sa sortie via des flux standard. De plus, en implémentant un SwingWorker, vous pouvez mettre à jour la barre de progression à partir du thread EDT, garantissant ainsi une interface graphique réactive.

Un exemple d'implémentation

L'exemple de code suivant montre comment utiliser ProcessBuilder avec SwingWorker pour afficher une barre de progression indéterminée lors de l'exécution d'un fichier batch :

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();
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal