【发布时间】:2012-08-27 06:46:55
【问题描述】:
背景
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 似乎也获得了未正确配置的 KeyEvent。我遇到数字键在使用 KeyEvent.VK_[0-9] 切换时仍然可以通过,但 VK_ESCAPE 和 VK_Q 等键似乎不匹配。我可能应该只查看它们在该 VM 中生成的“原始”代码并与之匹配,而不是 KeyEvent.VK_* 常量。合理的?
【问题讨论】:
-
它是否适用于
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);?它可能与阻止“钉枪”JVM 结束的SecurityMaager有关。 -
这当然有帮助。我希望我明白发生了什么,但感谢您的回答,我至少现在可以继续前进,稍后再尝试阅读有关该问题的信息。
-
如果它有效,我可以解释。有用吗?
-
是的。该课程以“正常”方式启动。