背景
Nailgun是一个实用程序(服务器协议客户端),用于将 Java 应用程序发送到服务器,目的是减少 VM 的启动时间。
问题
一个不同的基本摆动应用程序无法通过 nailgun 启动。调用 setDefaultCloseOperation 时,应用程序在标有“NG 1”和“NG 1.1”的行之间退出。服务器打印:
NGSession 2: 127.0.0.1: org.genja.volumeslider.Aframe exited with status 0
如果我注释掉 JFrame 的关闭操作方法,框架显示它应该。
代码
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);
}
}
问题
这可能是什么原因造成的?这是 nailgun 中的错误,还是我应该使用其他方式在 swing/java 中启用关闭按钮?我认为有必要提到应用程序确实退出而没有问题(x 按钮有效),即使该类是通过 nailgun 运行的,也没有设置默认的关闭操作(也许 nailgun 以某种方式这样做?)。
在这一点上我很困惑,任何建议都会很有用。
更新:
keylistener 似乎也获得了未正确配置的 KeyEvents。我遇到数字键在使用 KeyEvent.VK_[0-9] 切换时仍然可以通过,但 VK_ESCAPE 和 VK_Q 等键似乎不匹配。我可能应该只查看它们在该 VM 中生成的“原始”代码并与之匹配,而不是 KeyEvent.VK_* 常量。合理的?