0

私は Java プログラムに取り組んでおり、ユーザーがボタンをクリックしたときにコマンド ライン コードを実行したいと考えています。コマンド ライン コードとボタン コードを実行するコードを作成する必要がありますが、両方を組み合わせる方法はわかりません。ボタン コードは次のようになります。

    private JButton setup;
public ProgramGUI(){
    UsedHandler handler = new UsedHandler();
    setup.addActionListener(handler);

}
private class UsedHandler implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent event) {
        if(event.getSource()==setup)
            JOptionPane.showMessageDialog(null, "Everything fine!");
    }
}

そして、それが私のコマンドラインコードです:

            try {
            Runtime rt = Runtime.getRuntime();
            //Process pr = rt.exec("cmd /c dir");
            Process pr = rt.exec("c:\\helloworld.exe");

            BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));

            String line=null;

            while((line=input.readLine()) != null) {
                System.out.println(line);
            }

            int exitVal = pr.waitFor();
            System.out.println("Exited with error code "+exitVal);

        } catch(Exception e) {
            System.out.println(e.toString());
            e.printStackTrace();
        }

ありがとう!

4

2 に答える 2

2

コマンド ライン コードに多くの時間がかかり、AWT をブロックしないようにするには、マルチスレッドが必要です。

private class UsedHandler implements ActionListener, Runnable {
    private JButton setup;
    private Executor executor = Executors.newSingleThreadExecutor();

    @Override
    public void actionPerformed(ActionEvent event) {
        if (event.getSource() == setup) {
            executor.execute(this);
        }
    }

    @Override
    public void run() {
        try {
            Runtime rt = Runtime.getRuntime();
            Process pr = rt.exec("c:\\helloworld.exe");
            BufferedReader input = new BufferedReader(
                    new InputStreamReader(pr.getInputStream()));
            String line = null;
            while ((line = input.readLine()) != null)
                System.out.println(line);
            int exitVal = pr.waitFor();
            System.out.println("Exited with error code " + exitVal);
        } catch (Exception e) {
            System.out.println(e.toString());
            e.printStackTrace();
        }
    }
}
于 2013-04-23T14:06:19.997 に答える
0

実行コードをメソッドに入れ、ボタンから実行されるアクション内から呼び出します

public void yourProcess() {
try {
        Runtime rt = Runtime.getRuntime();
        //Process pr = rt.exec("cmd /c dir");
        Process pr = rt.exec("c:\\helloworld.exe");

        BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));

        String line=null;

        while((line=input.readLine()) != null) {
            System.out.println(line);
        }

        int exitVal = pr.waitFor();
        System.out.println("Exited with error code "+exitVal);

    } catch(Exception e) {
        System.out.println(e.toString());
        e.printStackTrace();
    }
}

次に、メソッドを使用します

 @Override
public void actionPerformed(ActionEvent event) {
    if(event.getSource()==setup){
        yourProcess();
        JOptionPane.showMessageDialog(null, "Everything fine!");
    }
}
于 2013-04-23T14:02:10.710 に答える