JavaのProcessクラスとは?目的と主なメソッドを実例付きで解説
概要
java.lang.Processクラスは、Objectクラスのサブクラスであり、Runtimeクラスのexec()メソッドによって起動された外部プロセスを表現するためのクラスです。Processオブジェクトを通じて、起動したプロセスの制御や情報の取得を行うことができます。
なお、Processクラスは抽象クラスとして定義されているため、直接インスタンス化することはできません。インスタンスは、Runtime.exec()などのメソッドの戻り値として取得します。
主なメソッド
- destroy(): プロセスを強制終了させる
- exitValue(): プロセスの終了コードを返す
- getErrorStream(): プロセスの標準エラー出力を読み取るストリームを取得する
- getInputStream(): プロセスの標準出力を読み取るストリームを取得する
- getOutputStream(): プロセスの標準入力へ書き込むストリームを取得する
- waitFor(): プロセスの終了を待機する
構文
public abstract class Process extends Objectサンプルコード
import java.util.concurrent.*;
public class ProcessTest {
public static void main(String[] args) throws Exception {
Runtime runtime = Runtime.getRuntime();
System.out.println("メモ帳アプリケーションを起動します");
// メモ帳アプリケーションを起動
Process process = runtime.exec("Notepad.exe");
System.out.println("5秒間待機します");
process.waitFor(5, TimeUnit.SECONDS);
System.out.println("メモ帳アプリケーションを終了します");
process.destroy(); // アプリケーションを破棄
}
}プログラムの説明
上記のプログラムでは、Processクラスを実際に利用しています。Runtimeクラスのexec("Notepad.exe")メソッドを呼び出すと、メモ帳アプリケーションが起動され、その戻り値としてProcessオブジェクトが返されます。
続いてwaitFor(5, TimeUnit.SECONDS)メソッドにより5秒間待機し、最後にdestroy()メソッドを呼び出してアプリケーションを破棄(終了)しています。このように、Processクラスを使えば外部アプリケーションの起動から終了までの一連の流れをJavaプログラム内で制御できます。
実行結果
メモ帳アプリケーションを起動します 5秒間待機します メモ帳アプリケーションを終了します
補足
現在のJava開発では、より柔軟にプロセスを構成できるProcessBuilderクラスを使って外部プロセスを起動する方法も広く推奨されています。環境変数の設定や作業ディレクトリの指定などが必要な場合は、ProcessBuilderの利用を検討するとよいでしょう。
-
JavaのSwingWorkerクラスとは?GUIアプリで非同期処理を行う重要性と使い方を解説
SwingWorkerクラスは、時間のかかる処理(長時間実行タスク)などをワーカースレッド上で非同期に実行し、その結果に基づいてイベントディスパッチスレッド(EDT)からSwingコンポーネントを安全に更新するための仕組みを提供します。このクラスはJava 1.6で導入されました。Swingでは、すべてのUI更新はEDT上で行う必要があります。しかし、EDT上で重い処理を直接実行すると画面がフリーズしてしまい、ユーザー体験を大きく損ないます。SwingWorkerを使えば、バックグラウンドでの処理とUIの更新を適切に分離できるため、応答性の高いデスクトップアプリケーションを実現できます。Swi
-
JavaのSwingUtilitiesクラスとは?invokeAndWait()とinvokeLater()で実現するスレッドセーフなGUI操作
JavaのSwingでは、コンポーネントが画面に表示された後、それらを操作できるのは「イベントディスパッチスレッド(Event Handling Thread)」と呼ばれる単一のスレッドだけです。これはSwingの重要な設計原則であり、複数のスレッドから同時にGUIを操作すると不整合や予期しない動作が発生するため、すべての描画・更新処理をこのスレッドに集約することで安全性を確保しています。開発者は、別途作成したコードブロックの参照をイベントディスパッチスレッドに渡すことができます。SwingUtilitiesクラスには、そのための2つの重要なstaticメソッド、invokeAndWait()