尝试在 Windows 上运行我的应用程序时出现“未找到类定义”异常(它在 OS X 上运行良好)。JVM 抱怨的类是我的类(不需要第三方 jar)。当我解压缩 jar 中的文件时,所有文件都存在,包括 JVMm 抱怨的文件。
jar 是使用以下任务创建的:
<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 并从将类解压缩到的目录中运行 jar,则一切正常。所以,我假设所有必需的文件都在 jar 中。
编辑:com.hamza.driver.ui
是一个名为的包中的一个类,com.hamza.driver
它有main
.
构建后,我得到一个 jar“app.jar”,然后使用“java -jar app.jar”运行它,它在 OS X 上可以正常执行,但在 Windows 上不行。
如果我app.jar
在单独的目录中解压缩并运行“java -jar app.jar”,它执行得很好。
编辑2:例外:
线程“主”java.lang.NoClassDefFoundError 中的异常:com/hamza/gui/tr ansfer/剪贴板TransferHandle 在 com.hamza.driver.ui.main(未知来源) 引起:java.lang.ClassNotFoundException:com.hamza.gui.transfer.Clipboa rdTransferHandle 在 java.net.URLClassLoader$1.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(未知来源) 在 java.lang.ClassLoader.loadClass(未知来源) 在 sun.misc.Launcher$AppClassLoader.loadClass(未知来源) 在 java.lang.ClassLoader.loadClass(未知来源) 在 java.lang.ClassLoader.loadClassInternal(未知来源) ... 1 更多
ClipboardTransferHandle .class 文件存在于 jar 中。
编辑 3:剪贴板类的导入:
导入 java.util.logging.Logger; 导入 java.awt.datatransfer.Clipboard; 导入 java.awt.datatransfer.ClipboardOwner; 导入 java.awt.datatransfer.Transferable; 导入 java.awt.datatransfer.StringSelection; 导入 java.awt.datatransfer.DataFlavor; 导入 java.awt.datatransfer.UnsupportedFlavorException; 导入 java.awt.Toolkit; 导入 java.io.IOException;
在玩它时,我发现如果我尝试ClipboardTransferHandle
在驱动程序中声明为静态变量,它可以工作,但是找不到每个不是静态的对象。所有主要的 GUI 元素都是静态变量,因此构建了 GUI,而其他元素则没有;创建的所有内容都不是静态原因NoClassDefFound
,但是如果我将它们声明为静态以进行测试,它们就会起作用。