仮想環境の標準入力/標準出力
仮想環境UserModeLinuxの標準入力/標準出力を取り出し
Javaのコンソールからコマンドを送信し、結果を出力するプログラムを作成したいと考えいてます。
プログラムは以下の通りです。
import java.io.*;
public class UMLControl {
public static void main(String[] args) throws IOException{
/*
* UMLの起動
*/
String command[] = {"linux.uml", "ubd0=uml-root-hardy", "umid=uml1"};
// UMLを起動するためのプロセス(端末)
Process uml_process;
uml_process = Runtime.getRuntime().exec(command); // UMLを起動する
InputStream is = uml_process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = null;
while ((line = br.readLine()) != null){
System.out.println(line);
}
/*
* UMLプロセスへの標準入力を渡して、実行するためのソースコード
*/
// UML本体のプロセス
Process process;
int uml_number = 1; // 作成したいUMLの数(私の場合は1台のみ)
int uml_no = 1; // 起動するUMLのナンバー(私の場合は1台のみ)
// プロセスへのコマンドを書き込むための、BufferWiter型のフィールドを宣言する
BufferedWriter bufferedwriter[uml_number];
bufferedwriter [uml_no] = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
// ユーザのコマンドの入力
// バッファリーダーの宣言(文字型入力ストリームから効率よくテキストを読み込む)
BufferedReader input = new BufferedReader (new InputStreamReader(System.in), 1);
System.out.print("UMLで実行するコマンドを入力してください>>");
String uml_control = input.readLine(); // コマンド(文字列)の入力
// 文字列を送る
bufferedwriter[uml_no].write(uml_control);
bufferedwriter[uml_no].flush();
/*
* 標準入出力を表示するソースコード
*/
BufferedReader inputreader = new BufferedReader(new InputStreamReader(process.getInputStream()));
// コマンドを読むバッファ
char[] cbuf = new char[8192];
// 入力を読み込む
int numRead = inputreader.read(cbuf);
while(numRead != -1){
if(numRead <= 8192){
// 標準入出力の内容を表示する
System.out.println(new String(cbuf, 0, numRead));
numRead = inputreader.read(cbuf);
}
}
}
}
UserModeLinuxの起動まではうまく動作します。
その後の「BufferedWriter bufferedwriter[uml_number];」
のuml_numberの部分で赤線があり、実行しても以下のように表示されます。
Exception in thread "main" java.lang.Error: コンパイル問題が未解決です:
トークン "uml_number" に構文エラーがあります。このトークンを削除してください
at UMLControl.main(UMLControl.java:28)
どのように解決するべきでしょうか。
お礼
すばやいご解答ありがとうございます。 C言語から習い始めてしまったので中々手続き指向から抜け出せなかったりします^^; 予定の登録、削除にはシェルのようなコマンド式のインターフェースを考えているのですが、これはどう実装するのが一般的でしょうか。ただ単にmain内で分岐させるとか・・・ なかなか見えてきません。