public class NewJFrame extends javax.swing.JFrame implements ActionListener {
public NewJFrame() {
initComponents();
}
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
jButton1 = new javax.swing.JButton();
jProgressBar1 = new javax.swing.JProgressBar();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jTextArea1.setEditable(false);
jTextArea1.setColumns(20);
jTextArea1.setRows(5);
jScrollPane1.setViewportView(jTextArea1);
getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);
jButton1.setText("Start Subprocess");
jButton1.addActionListener(this);
getContentPane().add(jButton1, java.awt.BorderLayout.PAGE_START);
getContentPane().add(jProgressBar1, java.awt.BorderLayout.PAGE_END);
pack();
}
public void actionPerformed(java.awt.event.ActionEvent evt) {
if (evt.getSource() == jButton1) {
NewJFrame.this.jButton1ActionPerformed(evt);
}
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
BatchTask task = new BatchTask(new ProcessBuilder("/bin/ls", "-R", "/opt"), jTextArea1, jProgressBar1);
task.execute();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new NewJFrame().setVisible(true);
}
});
}
/* */
class BatchTask extends SwingWorker<Boolean, String> {
ProcessBuilder pb;
JTextArea ta;
JProgressBar prg;
/* */
public BatchTask(ProcessBuilder pb, JTextArea ta, JProgressBar progress) {
this.pb = pb;
this.ta = ta;
this.prg = progress;
}
@Override
protected Boolean doInBackground() throws Exception {
prg.setIndeterminate(true);
Process p = pb.start();
BufferedReader is = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while((line = is.readLine()) != null) {
publish(line);
}
return true;
}
/* */
@Override
protected void process(List<String> lines) {
for(String line : lines) {
ta.append(line + "\n");
}
}
/* */
@Override
protected void done() {
prg.setIndeterminate(false);
}
}
private javax.swing.JButton jButton1;
private javax.swing.JProgressBar jProgressBar1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jTextArea1;
}