Java Jar到exe的麻烦,类路径理解

Java Jar到exe的麻烦,类路径理解,java,jar,classpath,exe,Java,Jar,Classpath,Exe,我以为我对事情有把握,但显然没有 所以我使用javac将.java转换为.class javac-KFile.java 然后我使用jar将类文件转换为jar文件 jar cf HPLCData.jar KFile.class 然后,我用launch4j包装了.jar文件,特别是不选中“不包装jar”以提供HPLCData.exe 在命令行中,如果我使用javakfile运行代码,它会像一个符咒一样工作。如果运行HPLCData.exe,则会出现此运行时错误,该错误似乎与我的目录扫描程序有关 Ex

我以为我对事情有把握,但显然没有

所以我使用javac将.java转换为.class

javac-KFile.java

然后我使用jar将类文件转换为jar文件

jar cf HPLCData.jar KFile.class

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

在命令行中,如果我使用
javakfile
运行代码,它会像一个符咒一样工作。如果运行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;
    }
});
static void addTree(路径目录,最终集合全部)
抛出IOException{
walkFileTree(目录,新的SimpleFileVisitor(){
@凌驾
公共文件VisitResult visitFile(路径文件,基本文件属性属性属性)
抛出IOException{
添加(文件);
返回FileVisitResult.CONTINUE;
}
});
编辑 值得一提的是,我觉得自己疯了,因为有时候.exe文件会在我的.jar和.class文件所在的原始目录中工作。我认为它们与此有关,但我开始注意到,当它工作时,我可以直观地看到创建了一个KFile$1.class文件

我忽略了这一点,因为老实说,它让我听起来像个疯子,我现在无法复制它

哦,很有趣。当我使用
javac-KFile.class


那么,让我试着把它们添加到我的jar文件中。

在你的
.java
-文件中,你似乎在使用匿名内部类。因此,你的编译将产生不止一个
.class
-文件。除了
KFile.class
之外,还有
KFile$1.class
KFile$2.class

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


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

你能在HPLCData.jar中运行java-jar HPLCData.jar
没有主清单属性吗?你说的有道理,但它必须自己管理,因为目录只有一个类文件和一些apache commons的东西,但我最终没有使用。是的,当.class文件实际存在时,它可以工作。它是用.javac生成的,我没有注意到它是什么时候开始这样做的。