9

(Swing を使用して) Java デスクトップ アプリケーションを作成し、JNLP を使用してネットから起動して動作させようとしています。アプリケーションはターミナルから起動すると正常に動作しますが、JNLP から起動するとすぐに閉じません。毎回手動でプロセスを強制終了する必要があります。

デフォルトのクローズ操作としてJFrame使用すると問題が発生する可能性があることを読みましたが、そうではありません。(暗黙的DISPOSE_ON_CLOSEに) を使用します。また、すべてのオブジェクトを解放した後にDO_NOTHING_ON_CLOSE明示的に呼び出しています。System.exit(0)

f = new JFrame("Pacman");
f.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(WindowEvent e) {
        // Terminate the Game-loop:
        GameLoop.INSTANCE.stopLoop();
        // Close the application:
        System.exit(0);
    }
});

アプリケーションを閉じるときに例外がスローされる可能性があると思いますが、JNLP で開始された実行中のアプリケーションのコンソール出力 (スタック トレースなど) を取得する方法が見つかりません。これが私が試したことです:

  • javawsデバッグパラメータから始めて接続しますjconsole(動作しますが、例外またはコンソール出力が見つかりません)。
  • デバッグ パラメーターから始めjavawsて、それに IntelliJ デバッガーをアタッチします (これも機能しますが、何も出力されません)。

では、JNLP を使用してアプリケーションを起動し、通常のデスクトップ アプリケーションで行う場合と同様に、出力 (デフォルトのアウト ストリームとエラー ストリームに書き込まれる) を取得するにはどうすればよいでしょうか?

4

3 に答える 3

2

TLS/SSL ハンドシェイク (つまり、close_notify または handshake_failure) に問題がある場合など、コンソールでさえ何も表示されない場合があります。これらの場合、次のことを行う必要があります。

  1. [Java コントロール パネル] > [詳細設定] で Java ログとトレースを有効にします。 Java コントロール パネル: ログとトレース

  2. Java をデバッグして JNLP を起動するためのパラメーターを有効にします。これを行うには 2 つの方法があります。

    2.a. JNLP ファイルをダウンロードし、コマンド ラインから実行します (SETこの場合、コマンドは必要ありません)。

    set JAVA_TOOL_OPTIONS=-Djavax.net.debug=all
    javaws -wait jnlp.jnlp
    

    2.b. -Djavax.net.debug=all[Java コントロール パネル] > [Java] > [表示] で JVM の引数 (つまり ) を追加し (これは、この特定のケースでは必要ありません)、ブラウザから JNLP ファイルを起動します。

    Java コントロール パネル: jvm 引数

  3. ログとトレースは、次の場所を貼り付けたJava Deployment Homelogのディレクトリにあります。

    を。Windows XP:%HOME%\Application Data\Sun\Java\Deployment

    b. ウィンドウズ 7/ビスタ:%APPDATA%\..\LocalLow\Sun\Java\Deployment

    c. Linux/Solaris:%HOME%/.java/deployment

于 2017-08-03T16:51:56.043 に答える
0

この回答は、リモート デバッグ (Windows) を有効にするためのnpe 回答の代替です。

  • コントロール パネルに移動します。
  • Java をクリックして、Java コントロール パネルを開きます。
  • Java コントロール パネル内で、[Java] タブに移動し、[表示] をクリックします。
  • これにより、Java バージョンがインストールされたウィンドウが開きます。実行時パラメーターに「-Xdebug -Xrunjdwp:transport=dt_socket,address=8123,server=y,suspend=n」を入力します (アプリケーションの起動時にデバッグする場合は、「suspend」を「y」に変更すると、編集者がリモートで接続するまで、アプリケーションは停止します)。

リモート デバッグを有効にする

その後、構成されたポート (この場合は localhost:8123) にリモートでデバッグするようにエディターを構成します。

于 2020-02-07T11:34:24.457 に答える