gpt4 book ai didi

java - Jar to exe 问题,类路径理解

转载 作者:行者123 更新时间:2023-11-30 08:41:58 25 4
gpt4 key购买 nike

我以为我掌握了一些东西,但显然不是。

所以我用javac把.java转成.class

javac KFile.java

然后我用jar把class文件转成jar文件

jar cf HPLCData.jar KFile.class

然后我用 launch4j 包装 .jar 文件,特别是保持“不包装 jar”未选中,以便为我提供 HPLCData.exe

在命令行中,如果我使用 java KFile 运行代码,它会非常有效。如果我运行 HPLCData.exe,我会收到此运行时错误,这似乎与我的目录扫描器有关。

Exception in thread "main" java.langNoClassDefFoundError: KFile$1
at KFile.addTree(KFile.java:162)
at KFile.main(KFile.java:48)
Caused by java.lank.ClassNotFoundEception: KFile$1
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass*Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unkonwon Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
.... 2 more

对我来说,错误似乎是我正在做的事情,因为如果我运行 java 脚本本身它工作正常,但是,这是下面的代码部分。我只是想,如果我制作一个包含类的jar文件,那么包装jar文件的.exe怎么找不到类?

static void addTree(Path directory, final Collection<Path> all)
throws IOException {
Files.walkFileTree(directory, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
throws IOException {
all.add(file);
return FileVisitResult.CONTINUE;
}
});

编辑

尽管如此,我认为自己疯了,因为有时 .exe 文件可以在我的 .jar 和 .class 文件所在的原始目录中运行。我以为他们与它有关,但我开始注意到当它工作时,我可以直观地看到 KFile$1.class 文件的创建。

我把它排除在外是因为老实说,它让我听起来像个疯子,我现在无法重现它。

哦,有趣。当我使用时出现 KFile$1.classjavac KFile.class
那么让我尝试将它们添加到我的 jar 文件中。

最佳答案

在您的.java 文件中,您似乎使用了匿名内部类。因此您的编译将产生多个 .class 文件。除了 KFile.class 之外,还有 KFile$1.class 和可能的 KFile$2.class

所有这些都是执行您的程序所必需的,但您只是将 KFile.class 添加到您的 jar 文件中,因此在从 jar 执行应用程序时不会找到所有其他内容。

尝试 jar cf HPLCData.jar *.class 将所有类文件包含在当前目录中(最好只有当前项目中的类文件),然后一切都应该按预期工作。

关于java - Jar to exe 问题,类路径理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34767556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com