Java 从jar运行时出现NoClassDefFoundError
我尝试在Windows上运行应用程序时遇到“找不到类定义”异常(它在OS X上运行正常)。JVM抱怨的类是我的类(不需要第三方JAR)。当我解压缩jar中的文件时,所有文件都存在,包括JVMm抱怨的文件 jar是使用以下任务创建的:Java 从jar运行时出现NoClassDefFoundError,java,jar,noclassdeffounderror,Java,Jar,Noclassdeffounderror,我尝试在Windows上运行应用程序时遇到“找不到类定义”异常(它在OS X上运行正常)。JVM抱怨的类是我的类(不需要第三方JAR)。当我解压缩jar中的文件时,所有文件都存在,包括JVMm抱怨的文件 jar是使用以下任务创建的: <target name="jar" depends=""> <jar destfile="build/app.jar" > <manifest> <attribute name="Built-By" valu
<target name="jar" depends="">
<jar destfile="build/app.jar" >
<manifest>
<attribute name="Built-By" value="hamza"/>
<attribute name="Main-Class" value="com.hamza.driver.ui"/>
<attribute name="Class-Path" value="./"/>
</manifest>
<fileset dir="build">
<include name="**/*.class"/>
<include name="**/*.png"/>
<include name="**/*.xpi"/>
<include name="**/*.html"/>
<exclude name="**/*.jar"/>
</fileset>
</jar>
jar中存在ClipboardTransferHandle.class文件
编辑3:为剪贴板类导入:
import java.util.logging.Logger;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.Toolkit;
import java.io.IOException;
导入java.util.logging.Logger;
导入java.awt.datatransfer.Clipboard;
导入java.awt.datatransfer.ClipboardOwner;
导入java.awt.datatransfer.transfer;
导入java.awt.datatransfer.StringSelection;
导入java.awt.datatransfer.DataFlavor;
导入java.awt.datatransfer.UnsupportedFlavorException;
导入java.awt.Toolkit;
导入java.io.IOException;
在使用它的过程中,我发现如果我试图在驱动程序中将ClipboardTransferHandle
声明为静态变量,它会工作,但是找不到每个非静态的对象。
所有主要GUI元素都是静态变量,因此GUI是构建的,而其他元素不是;所有创建的不是静态的东西都会导致NoClassDefFound,但是如果我将它们声明为静态进行测试,它们就会工作。您是否在类路径中指定了新的jar(java-cp.;new.jar MainClass.class)?缺少哪个类?您的主类属性看起来有点可疑——com.hamza.driver.ui是类还是包?有一种可能,没有抛出NoClassDefFoundError(我真的很讨厌这个错误-总是让我发疯……),因为它找不到它告诉您的类(->您的类)但是因为java找不到用于实例化该类的类 我曾经遇到过这个问题,当一个类从另一个jar(在我的例子中是一个OSGi包)导入了另一个没有正确导出的类时。尽管这是一个OSGi特有的问题,但您的环境中可能存在同样的问题。可能您的应用程序依赖于实际OS-X环境中存在的某些类,而不是实际窗口环境中的类。我不是看第三方库,而是看Java实现本身 祝你好运 编辑 还有两个非常相似的问题,不幸的是,没有公认的解决方案,但可能有一个提示对您的情况有帮助: 编辑2 这里有一个类似的问题,有一个公认的答案。希望这个有帮助:
这就是正在发生的问题 如果JAR文件是从“C:\java\apps\appli.JAR”加载的,并且您的清单文件具有类路径:reference“lib/other.JAR”,那么类加载器将在“C:\java\apps\lib”中查找“other.JAR”。它不会查看JAR文件条目“lib/other.JAR” 解决方案:-
您可以尝试不使用Class-Path属性,并检查是否重现了问题。显示精确的调用命令,如“java-jar my.jar”。如果可能的话,链接到有问题的jar。com.hamza.gui.tr transfer.ClipboardTransferHandle类中的导入是什么?但是如果是这样的话,解压时它就不应该工作了。但它是有效的。我只想让你知道,7年后,你让我免于很多(更多)挫折,谢谢! import java.util.logging.Logger; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.ClipboardOwner; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.Toolkit; import java.io.IOException;