>Java >java지도 시간 >Java에서 배치 파일을 실행하는 동안 불확실한 진행률 표시줄을 표시하는 방법은 무엇입니까?

Java에서 배치 파일을 실행하는 동안 불확실한 진행률 표시줄을 표시하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-06 07:45:12468검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.