コンソール モードとグラフィカル モードを切り替える方法があるかどうか知りたかっただけです。私はスイングでJavaを使用しています。
シェルに何かを入力してコンソール モードに移行し、何かを入力してデスクトップに戻ることができるかどうかを知りたいです。または、起動時に何らかのキーを押すことができるかどうかなどです。アイデアは、サーバーをコンソール モードで実行することですが、タスクを簡単に実行したい場合はデスクトップを利用できるようにすることです。
コンソール モードとグラフィカル モードを切り替える方法があるかどうか知りたかっただけです。私はスイングでJavaを使用しています。
シェルに何かを入力してコンソール モードに移行し、何かを入力してデスクトップに戻ることができるかどうかを知りたいです。または、起動時に何らかのキーを押すことができるかどうかなどです。アイデアは、サーバーをコンソール モードで実行することですが、タスクを簡単に実行したい場合はデスクトップを利用できるようにすることです。
java.awt.GraphicsEnvironment.isHeadless()
プログラムが実行されている環境が GUI をサポートしているかどうかを確認するために使用できます。
public static void main(String[] args){
if (GraphicsEnvironment.isHeadless()){
// Run console mode
} else {
// Start in GUI mode
}
}
もし私があなたなら、これをコマンドライン スイッチにして、グラフィック環境でもコンソール モードを使用できるようにします。isHeadless
利便性を最大限に高めるために、これは、次のようなチェックを使用するある種の「自動」オプションにデフォルト設定される必須ではないオプションになります。
public static void main(String[] args){
final List<String> arguments = Arrays.asList(args);
final int modeIndex = arguments.indexOf("-mode");
final String mode = modeIndex == -1 ? "auto" : argument.get(modeIndex);
if ("auto".equals(mode)) runAuto();
else if ("console".equals(mode)) runConsole();
else if ("gui".equals(mode)) runGui();
else System.err.println("Bad mode: " + mode);
}
private static void runGui(){ ... }
private static void runConsole(){ ... }
private static void runAuto(){
if (GraphicsEnvironment.isHeadless()) runConsole();
else runGui();
}
(TODO: エラー処理の追加、マジック文字列リテラルの削除など)
したがって、プログラムをjava YourMainClass
orで開始すると、GUI とコンソールのどちらが必要か、コンソール モードを強制するためjava YourMainClass -mode auto
に使用するか、GUI モードを強制するために使用するかについて、経験に基づいた推測が行われます。 java YourMainClass -mode console
java YourMainClass -mode gui
プロジェクトをサーバーと GUI の 2 つに分割できます。サーバーをサービス (Windows) またはデーモン (Linux) として実行できます。GUI が必要な場合は、それを起動して操作する必要があります。
MlDonkey、Ettercapなどのアプリケーションのようなものです。
コマンド ラインでパラメータを渡し、 で調べることができますmain(String[] args)
。彼らはで終わるでしょうargs
。したがって、最も簡単な方法はargs.length > 0 && "-c".equals (args[0])
、コンソール モードで実行するようにプログラムを指示し、それ以外の場合は UI を開くようにチェックすることです。
もう 1 つのオプションは、2 つのmain()
メソッドを (異なるクラスで) 記述し、正しい方を使用することです。
プログラムでは、GUI を非表示にするコマンドを定義できます。トリックを行う必要があるような何かgui.setVisible(false)
、それはGUIによって参照されるウィンドウとそのすべての要素を非表示にします。
必要なコンポーネント/構成を簡単に作成できる GUI ウィザードを起動するコマンド ライン コマンドを作成し、GUI が複雑な命令を単一のアプリケーション スレッドに戻すことができるようにします。GUI コンポーネントを使用後に破棄することが役立つか、それとも単に非表示にするかは、GUI コンポーネントを使用する頻度に関して決定する必要があります。