-1

如果我通过 netbeans 运行程序,我在主类中有以下代码。但是当我打开 netbeans 制作的 jar 时,好像我没有在 main 中写过任何东西,除了new FormTTS().setVisible(true); If i write

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 是通过以下方式更新的:在将 exit 放在 main 中后,我在 FormTTS 中更改了一些内容;我可以从 JAR 中看到这种变化。

已编辑 我现在所做的是;我删除了 main 中的所有代码,但它在 netbeans 中不起作用(显然)但 FormTTS 在 JAR 中打开!!!!通过删除 JAR、清理构建项目并打开 JAR,确保 JAR 属于该程序

4

1 回答 1

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

<重要部分>

   1:   invokestatic    #19; //Method java/lang/System.exit:(I)V

</IMPORTANT_PART>

   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

}
于 2013-10-01T16:19:22.797 回答