-1

メインクラスに次のコードがあり、netbeans を介してプログラムを実行すると機能します。しかし、netbeans によって作成された jar を開くと、メインに何も書いていないように見え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 が確実に更新されるようにしました: メインに exit を配置した後、FormTTS で何かを変更します。JARからその変更を見ることができます。

Editied 私が今やったことは; メインのすべてのコードを削除しましたが、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

</重要な部分>

   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 に答える