如果我通过netbeans运行程序,我在主类中有以下代码。但是当我打开netbeans制作的jar时,好像我没有在main中写任何东西,除了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()之外的任何其他函数或按钮)
我确保jar更新BY: 在main中退出后,我在FormTTS中更改了一些内容;我可以从JAR看到这种变化。
Editied 我现在做的是;我删除了main中的所有代码,它在netbeans中不起作用(显而易见)但是FormTTS在JAR中打开!!!! 通过删除JAR,清理构建项目并打开JAR来确保JAR属于该程序
答案 0 :(得分:0)
仔细检查您的JAR。如果您运行javap -classpath test.jar -c package.ClassName
,您将看到字节码,如果您的System.exit语句确实包含在jar文件中,它应该看起来像这样:
C:\Users\UFL1138\Desktop>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
&LT; IMPORTANT_PART&GT;
1: invokestatic #19; //Method java/lang/System.exit:(I)V
&LT; / IMPORTANT_PART&GT;
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
}