Newer
Older
KisoJikkenNWP / src / main / java / istlab / KisoJikken / ShellScriptPanel.java
package istlab.KisoJikken;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class ShellScriptPanel extends JPanel implements ActionListener, Runnable {
    JTextArea jta;
    JScrollPane jsp;
    JLabel lbl;
    String script;
    JButton execB;
    Thread thread;
    Process process;

    // private Thread stdOutReader;
    // private Thread stdErrReader;
    // private boolean stopThreads;
    // private final PipedInputStream stdOutPin = new PipedInputStream();
    // private final PipedInputStream stdErrPin = new PipedInputStream();

    public ShellScriptPanel(String script) {
        setLayout(new BorderLayout());
        this.script = script;
        jta = new JTextArea();
        jta.setEditable(false);
        jsp = new JScrollPane(jta);
        add(jsp);
        lbl = new JLabel(script);
        add(lbl, BorderLayout.NORTH);

        execB = new JButton("Run / Stop");
        execB.addActionListener(this);
        add(execB, BorderLayout.SOUTH);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (thread == null) {
            thread = new Thread(this);
            thread.start();
        } else {
            process.destroyForcibly();
            thread = null;
        }
    }

    @Override
    public void run() {
        // Run script
        System.out.println(App.userhome + App.nwpsrc+ "/" + script);
        ProcessBuilder processBuilder = new ProcessBuilder("bash", App.userhome + App.nwpsrc +"/"+ script);
        // ProcessBuilder processBuilder = new ProcessBuilder("pwd");
        processBuilder.directory(new File(App.userhome+App.nwpsrc));
        processBuilder.inheritIO();
        try {
            process = processBuilder.start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                jta.append(line);
            }
            process.waitFor();
        } catch (IOException | InterruptedException e1) {
            e1.printStackTrace();
        }
        System.out.println("======== Exit ========");
        thread = null;
    }

}