Javaによって生成されたシェル内でBASHスクリプトを実行し、そのBASHスクリプトの結果をJTextAreaで表示しようとしています。
これが魔法が起こっている(と思われる)クラスです。
import java.io.IOException;
public class Bobsors {
public static Mainframe frame;
public static void main(String[] args) {
frame = new Mainframe();
frame.start();
run();
}
public static void run() {
String[] cmd = new String[]{"/bin/sh", "PATH=~/Desktop/bobsors.sh"};
try {
Process process = Runtime.getRuntime().exec(cmd);
frame.setLog(process);
} catch (IOException e) {
e.printStackTrace();
}
}
}
これが私のフレームのクラスです。
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextArea;
import javax.swing.JLabel;
import javax.swing.border.TitledBorder;
@SuppressWarnings("serial")
public class Mainframe extends JFrame {
private JPanel contentPane;
public static Mainframe frame;
public static JTextArea log = new JTextArea();
/**
* Launch the application.
*/
public void start() {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frame = new Mainframe();
frame.setVisible(true);
frame.setTitle("Bobsors Java Application.");
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public void setLog(Process process) {
log.setText(process.toString());
}
/**
* Create the frame.
*/
public Mainframe() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JPanel panel = new JPanel();
panel.setBorder(new TitledBorder(null, "Shell Log", TitledBorder.LEADING, TitledBorder.TOP, null, null));
panel.setBounds(7, 50, 434, 217);
contentPane.add(panel);
panel.setLayout(null);
log.setBounds(5, 17, 424, 210);
log.setEditable(false);
panel.add(log);
JLabel lblBobsors = new JLabel("Bobsors");
lblBobsors.setBounds(12, 12, 70, 15);
contentPane.add(lblBobsors);
JLabel lblWorksOnLinux = new JLabel("Works on Linux only");
lblWorksOnLinux.setBounds(12, 26, 203, 15);
contentPane.add(lblWorksOnLinux);
}
}
実行時に表示されるのは、この「java.lang.UNIXProcess@509d5bae」だけです。これを適切に行う方法を知っている人はいますか?