※ ChatGPTを利用し、要約された質問です(原文:SWTのStyledTextを使用したコンソールの開発)
SWTのStyledTextを使用したコンソールの開発
このQ&Aのポイント
SWTのStyledTextを使って、コマンドプロンプトのSWT版を作ろうと考えています。
「adb shell logcat」をStyleTextから実行後すると、一度、ログの内容が出力され、そのまま待機します。その後、ログが出力されてるたびにStyleTextにログが追記されるというものです。
上記の要件を満たすために、SWTのStyledTextにログの内容を追記するメソッドを作成しました。
SWTのStyledTextを使用したコンソールの開発
SWTのStyledTextを使って、コマンドプロンプトのSWT版を作ろうと考えています。
具体的には、Google Androidの「adb shell logcat」の内容をSWTのStyledTextに表示したいのですが、実行するとGUIが固まってしまいます。
期待している動作は、「adb shell logcat」をStyleTextから実行後すると、一度、ログの内容が出力され、そのまま待機します。
その後、ログが出力されてるたびにStyleTextにログが追記されるというものです。
以下は該当箇所のソースです。
String command = "C:/android-sdk-windows-1.5_r1/tools/adb.exe shell logcat";
Display.getCurrent().asyncExec(new Runnable() {
@Override
public void run() { exec(command);
}
});
protected boolean exec(String command) {
Process process = null;
ProcessBuilder pb = new ProcessBuilder("cmd", "/C", command);
try {
process = pb.start();
InputStream in = process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in,
"UTF-8"));
String line;
while ((line = br.readLine()) != null) {
if (line.length() == 0) {
line = br.readLine();
}
// 次も空行なら終了
if (line.length() == 0) {
break;
}
styledText.append(line);
styledText.append("\n");
// スクロールバーを下に動かす styledText.setTopIndex(styledText.getLineCount());
}
br.close();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
お礼
ありがとうございます。 アドバイスを元に以下の手順で期待する動作を実現できました。 A UIを更新するスレッド B adb.exeを実行するスレッド C adb.exeの出力を監視するスレッド 1. Bを実行 2. Cを実行 3. CがBからの出力を検出 4. CがAのスレッドを呼び出しUIを更新