我在主类中有以下代码,如果我通过 Netbeans 运行程序,它可以工作。但是当我打开网豆制作的罐子时,除了new FormTTS().setVisible(true);
之外,我似乎没有写任何东西如果我写
public static void main(String args[])throws Exception {
System.exit(0);
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
JOptionPane.showMessageDialog(null,"1125");
new FormTTS().setVisible(true);
}
});
}
奇怪的是,程序只是通过从netbeans运行退出,但在JAR中并非如此,如果运行jar,它会打开FormTTS!!
我离不开这个,因为我还有一些其他代码必须被 exit() 替换并且需要抛出异常(我不能从 main() 以外的任何其他函数或按钮执行此操作)
我确保罐子通过以下方式更新:在将退出放入主后,我在 FormTTS 中更改了一些内容;我可以从 JAR 中看到这种变化。
已编辑我现在所做的是;我删除了 Main 中的所有代码,它在 NetBeans 中不起作用(很明显),但 FormTTS 在 JAR 中打开!!!通过删除 JAR、干净构建项目并打开 JAR 来确保 JAR 属于该程序
仔细检查你的 JAR。 如果你运行javap -classpath test.jar -c package.ClassName
你会看到字节码,如果你的System.exit语句确实包含在jar文件中,它应该看起来像这样:
C:UsersUFL1138Desktop>javap -classpath test.jar -c test.TestByteCode
Compiled from "TestByteCode.java"
public class test.TestByteCode extends java.lang.Object{
public test.TestByteCode();
Code:
0: aload_0
1: invokespecial #8; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]) throws java.lang.Exception;
Code:
0: iconst_0
1: invokestatic #19; //Method java/lang/System.exit:(I)V
4: new #25; //class test/TestByteCode$1
7: dup
8: invokespecial #27; //Method test/TestByteCode$1."<init>":()V
11: invokestatic #28; //Method java/awt/EventQueue.invokeLater:(Ljava/lang/Runnable;)V
14: return
}