バックグラウンド
Nailgunは、VMの起動時間を短縮する目的で、Javaアプリケーションをサーバーに送信するためのユーティリティ(server-protocol-client)です。
問題
さまざまな基本的なスイングアプリケーションは、ネイルガンを介して起動できません。setDefaultCloseOperationを呼び出すと、アプリケーションは「NG1」と「NG1.1」でマークされた行の間に終了します。サーバーはこれを出力します
NGSession 2: 127.0.0.1: org.genja.volumeslider.Aframe exited with status 0
。JFrameのclose-operationメソッドをコメントアウトすると、フレームは正常に表示されます。
コード
package org.genja.volumeslider;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.imageio.*;
import java.util.*;
import java.io.*;
public class Aframe {
public static void main(String[] argv) {
System.out.println("NG 1");
JFrame frame = new JFrame("VolumeSlider");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
System.out.println("NG 1.1");
frame.setPreferredSize(new Dimension(64,200));
frame.setResizable(false);
JSlider slider = new JSlider(JSlider.VERTICAL, 0, 55, 12);
frame.add(slider, BorderLayout.CENTER);
//Display the window.
frame.pack();
frame.setVisible(true);
}
}
質問
これを引き起こしているのは何ですか?これはネイルガンのバグですか、それともswing / javaで閉じるボタンを有効にする他の方法を使用する必要がありますか?クラスがネイルガンを介して実行されても、デフォルトのクローズ操作を設定せずに、アプリケーションが問題なく終了する(xボタンが機能する)ことを言及するのは適切だと思います(おそらくネイルガンはこれをどうにかして行いますか?)。
私はこの時点でかなり混乱しています、そしてどんな提案も役に立つでしょう。
アップデート:
また、キーリスナーは適切に構成されていないKeyEventsを取得しているようです。KeyEvent.VK_ [0-9]で大文字と小文字を区別しても数値キーは通過しますが、VK_ESCAPEやVK_Qなどのキーは一致していないようです。KeyEvent.VK_ *定数ではなく、VMで生成された「生の」コードを調べて、それと照合する必要があります。適正?