我在部署在eclipse中运行良好的应用程序时遇到了问题,但在创建可运行的jar时会产生以下错误(使用选项:将所需的库提取到生成的JAR中):
org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.NoSuchMethodError: org.apache.log4j.spi.LoggingEvent.getTimeStamp()J)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Unknown Source)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Unknown Source)
at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
at org.eclipse.jface.window.Window.runEventLoop(Window.java:820)
我正在使用log4j-1.2.16.jar,它包含在生成的jar中。
我不确定在哪里进行故障排除,我试图在其他包含的jar中找到org.apache.log4j.spi.LoggingEvent的其他(较旧的)实例,但到目前为止我没有找到任何。< / p>
答案 0 :(得分:7)
它说,没有方法 org.apache.log4j.spi.LoggingEvent.getTimeStamp() 再次查找类路径上的类,您应该找到类 org.apache.log4j.spi.LoggingEvent 两次。一种没有方法的方法一。
答案 1 :(得分:1)
我正在使用log4j-1.2.16.jar,它包含在生成的jar中。
Java类加载器不是为了处理Jar中的Jar而设计的。可以将Jar的 resources (类等)放到另一个Jar中(我想在Eclipse中使用一个名为'FatJar'的工具),但这可能会破坏EULA。
在应用程序的运行时类路径中包含Jar的常用方法是添加一个清单文件,该文件指定Jar的相对路径。