【问题标题】:Main has no effect on JARMain 对 JAR 没有影响
【发布时间】:2013-10-07 21:29:40
【问题描述】:

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

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

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

【问题讨论】:

  • 每次进行更改时是否都导出到 JAR?他们有可能不同步吗?
  • 是的,我每次都成功@UFL1138
  • 要么你的 JAR 不同步,要么它没有设置为运行你认为的类。在该 JAR 中找到 manifest.mf 并与您正在更改的类的名称进行比较。
  • @UFL1138 先生,我通过 Winrar 提取了 JAR。在那里我找到了一个清单。这里是它的内容: Manifest-Version: 1.0 Ant-Version: Apache Ant 1.7.0 Created-By: 1.4.2_16-b05 (Sun Microsystems Inc.) Class-Path: lib/freetts.jar Main-Class: freetts.FreeTTS
  • 上面的代码 sn-p 是来自 freetts.FreeTTS 类吗?

标签: java exception netbeans jar main


【解决方案1】:

仔细检查您的 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

}

【讨论】:

  • 先生,我不知道这一切,但要检查 jar 我所做的是,我在将 exit 放在 main 之后更改了 formtts 中的一些内容,我可以看到 jar 中的更改。所以我认为它应该做你要求我做的所有事情
  • 尝试运行此命令,看看您是否在main 方法的顶部看到invokestatic。另外,您使用什么命令通过 JAR 调用它?
  • 先生,我没有使用任何命令,我只是转到文件所在的位置,然后在 dist 和 JAR 中。我不知道如何运行你问的命令。我想分发 jar,因为它是这样,所以我不能要求他们从 cmd 运行它,我只是希望它通过单击来工作。请注意,我今年 14 岁,所以请不要生气并详细解释。谢谢
  • 从命令提示符运行该命令。您使用的是什么操作系统?您可以将 Manifest.MF 的内容添加到原始问题中吗?
  • 我使用的是 Windows 8;我不知道你所说的 manifest.mf 应该在哪里。因为我在项目目录中找到了一个。但它只有这个:Manifest-Version: 1.0 Ant-Version: Apache Ant 1.7.0 Created-By: 1.4.2_16-b05 (Sun Microsystems Inc.)
猜你喜欢
  • 2020-11-10
  • 2015-11-04
  • 2010-12-01
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 2021-11-23
相关资源
最近更新 更多