繁体   English   中英

我的launch4j .exe文件无法像我的java文件那样工作。 我想念什么吗?

[英]My .exe file from launch4j does not work like my java file. Am I missing something?

作为Java新手并使用代码捆绑程序,我能够运行一个简单的新HelloWorld Java文件成功获得正确的输出。 因此,我认为将Java文件编译为类文件或之后运行该文件没有问题,并且我拥有Java套件中创建可执行文件所需的所有文件。 但是,我不确定是否通过设置.jar或通过制作适当的.xml文件的过程正确使用launch4j来获取.exe。

下面的代码显示了当我尝试将所有内容放入.jar文件时得到的结果,但是我猜输出是错误的,因为除非我从“ cvfm”中取出“ m”,否则不会生成新的.jar文件在jar命令中。 该代码确实显示了有关添加清单的某些信息,尽管这样做仍然没有,但是我仍然没有获得适当的应用程序。 在没有launch4j的情况下获得正确的输出后,我停止了重新创建.java和.class文件,而只是在重新创建.jar文件时没有任何区别的时候专注于.xml。 我已经在launch4j中尝试过,将环境变量在JRE选项卡中留为空白,或者仅在命令提示符下包含与Java文件正确使用的系统变量相同的路径,并且还将GUI的检查切换为标头中的console标签。 研究还告诉我要查找manifest.mf文件,我认为JDK中没有该文件,但可能在工具包中找到了类似的文件(至少在查找诸如bin等典型区域时)夹)。

C:\JavaTest>jar cvfm HelloWorld.jar HelloWorld.class
java.io.IOException: invalid header field
        at java.util.jar.Attributes.read(Attributes.java:406)
        at java.util.jar.Manifest.read(Manifest.java:234)
        at java.util.jar.Manifest.<init>(Manifest.java:81)
        at java.util.jar.Manifest.<init>(Manifest.java:73)
        at sun.tools.jar.Main.run(Main.java:176)
        at sun.tools.jar.Main.main(Main.java:1288)

C:\JavaTest>jar cvf HelloWorld.jar HelloWorld.class
added manifest
adding: HelloWorld.class(in = 426) (out= 289)(deflated 32%)

在测试包装器时,我总是会收到有关签名的警告,但我认为这并不是像实际错误那样的问题。 由于众多组合的性质,很难跟踪导致问题差异的原因,但是似乎现在将JRE选项卡留空了,除了拥有最小的JRE版本以外,还会产生错误“无主清单属性”来自launch4j中的包装器测试。 将环境变量字段中包含的系统变量路径的末尾做同样的事情。 在尝试重新创建.jar之前,将标头切换到控制台将创建一个没有错误的.exe,但是打开应用程序将不执行任何操作,或者在命令提示符下输出相同的“ no main manifest attribute”。 现在,我什至不能使用launch4j来测试在控制台上具有标头的包装器,即使在构建它们时也不会产生错误(但是打开.exe时也会发生相同的错误)。 我只是想让launch4j生成.exe,以便在命令提示符下提供与在其中键入“ java HelloWorld”时得到的输出相同的输出。

如果确实要正确创建.jar并正确使用launch4j,我是否只是错过了需要某种清单文件才能与launch4j一起使用的未列出步骤? 如果是这样,我如何确保我正确地获得了它? 它会显示在bin文件夹中还是与JDK完全分开? 我需要将其移动到java / class / jar / exe文件所在的JavaTest文件夹中吗? 任何帮助,我们都感激不尽。

jar cvfm的'm'代表清单,表示您将提供一个文件作为清单文件。 f代表:您将指定文件名。

因此, HelloWorld.jar是f的参数,而HelloWorld.class是m的参数。 您的类文件显然不是有效的清单文件,因此为什么会发生错误。

通常,使用构建工具来制作罐子,例如maven或gradle。 您需要一个清单以拥有Main-Class属性,并且需要Main-Class属性来创建可运行的jar,并且需要可运行的jar来启动它。

制作一个名为MANIFEST.MF的文件。 用纯文本编辑器创建它。 它应包含:

Main-Class: com.foo.thisIsAPackage.YourMainClass

没别的。

然后:

jar cvfm HelloWorld.jar MANIFEST.MF YourMainClass.class

请注意,我很确定您必须有一个包装,否则将无法使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM