ワークスペースを切り替えたときにEclipseが自動的に再起動するのと同じように、ユーザーのアクションに応じてJavaGUIアプリケーションを再起動する必要があります。
現在install4jランチャーを使用しているので、特定のリターンコードなどでアプリケーションを終了した場合に、ランチャーを実行したままにしてアプリケーションを再起動するように構成できるかどうか疑問に思っています。
乾杯
ワークスペースを切り替えたときにEclipseが自動的に再起動するのと同じように、ユーザーのアクションに応じてJavaGUIアプリケーションを再起動する必要があります。
現在install4jランチャーを使用しているので、特定のリターンコードなどでアプリケーションを終了した場合に、ランチャーを実行したままにしてアプリケーションを再起動するように構成できるかどうか疑問に思っています。
乾杯
これはinstall4jの機能ではありません。ただし、java.lang.ProcessBuilderを使用してランチャーを再起動し、System.exit()を呼び出すことができます。
ランチャーがシングルインスタンスGUIランチャーの場合は、ランチャーがシャットダウンするのを待ってから元の実行可能ファイルを再起動する別の実行可能ファイルを使用する必要があります。これは、「スタートアップ」ノードに「ランチャーの実行」アクションを含むカスタムインストーラーアプリケーションを使用して簡単に実行できます。カスタムインストーラーアプリケーションは、引数を使用してAPIを介して起動されます
-q -wait 20
つまり、無人モード(GUIなし)で実行され、インストールされているすべてのランチャーがシャットダウンするまで最大20秒待機します。プログレスバーを表示するには、
-splash "Restarting application"
引数に。カスタムインストーラーアプリケーションを起動するコードは次のようになります。
import java.io.IOException;
import com.install4j.api.launcher.ApplicationLauncher;
try {
ApplicationLauncher.launchApplication("ID", new String[] {
"-q","-wait","20"
}, false, null);
} catch (IOException e) {
e.printStackTrace();
//TODO handle invocation failure
}
ここで、IDはカスタムインストーラーアプリケーションのIDに置き換える必要があります。
必ず実行可能ファイル名を設定してください。
それ以外の場合は、サイレントに失敗します。インストーラーのコンパイルとlaunchApplication()
呼び出しはエラーをスローしません。また、エラーメッセージやログファイルを確認する必要がなかったため、1日かけて試行錯誤を繰り返しました。
また、カスタムIDを設定して、不可解なアプリケーションIDを回避することもできます。
ApplicationLauncher.launchApplication("restarter", new String[] { "-q", "-wait", "20", "-splash", "Restarting..." }, /* blocking */ false, /* callback */ null);