0

開くボタンと戻るボタンのあるフォームがあります。[開く] ボタンからバッチ ファイルを開きます。バッチ ファイルの実行中は、他のボタンは無効になります。これらのボタンを有効にしたい。私を助けてください。

バッチ ファイル コードを実行します。

private void openActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    // back.setEnabled(true);
    String filename = "C:\\JMeter Project\\jakarta-jmeter-2.5.1\\bin\\jmeter.bat";
    String command = filename;
    Runtime runtime = Runtime.getRuntime();
    try {
        Process process = runtime.exec(command);
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line = reader.readLine();
        while (line != null) {
            System.out.println(line);
            line = reader.readLine();
            System.out.println(line);
        }
        back.setEnabled(true);
        JOptionPane.showMessageDialog(null, "Batch file executed successfully.....!!!!");
    } catch (IOException e) {

        JOptionPane.showMessageDialog(null, "Batch file execution failed.");
    }
    // Form f=new Form();
    // back.action(f.setVisible(true),null);   

}

戻るボタンのコード:

private void backActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    close();
    sms_sound s = new sms_sound();
    //s.setVisible(true);
    Form f = new Form();
    f.setVisible(true);
    //  back.setEnabled(true);
}
4

1 に答える 1

2

イベントディスパッチスレッドをブロックしているため、再描画リクエストの処理が妨げられています。

「バッチ」コードをバックグラウンド スレッドに移動する必要がありますSwingWorker。この問題には a のようなものが最適です。

例を追加

public class BatchRunner extends SwingWorker<Integer, String> {

    @Override
    protected Integer doInBackground() throws Exception {
        String filename = "C:\\JMeter Project\\jakarta-jmeter-2.5.1\\bin\\jmeter.bat";
        String command = filename;
        Runtime runtime = Runtime.getRuntime();
        Process process = runtime.exec(command);
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line);
            publish(line);
        }
        return process.exitValue();
    }

    @Override
    protected void process(List<String> chunks) {
        // You can process the output produced
        // the doBackgroundMethod here within the context of the EDT
    }

    @Override
    protected void done() {
        try {
            Integer result = get();
            if (result == 0) {
                JOptionPane.showMessageDialog(null, "Batch file executed successfully.....!!!!");
            } else {
                JOptionPane.showMessageDialog(null, "Batch file returned an exit value of " + result);
            }
        } catch (InterruptedException | ExecutionException | HeadlessException interruptedException) {
            JOptionPane.showMessageDialog(null, "Batch file execution failed.");
        }
        back.setEnabled(true);
    }
}

バッチ プログラムを実行する準備ができたら、次のようにします。

back.setEnabled(false);
new BatchRunner().execute();
于 2013-02-28T06:47:45.067 に答える