![](/img/trans.png)
[英]Did I skip necessary steps for my JRE and in Launch4j to cause my exe file to fail?
[英]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.