我讨厌用这个发帖子但是我是Java的新手......我跟着this tutorial创建了一个套接字服务器(在Eclipse中开采)。我可以在Eclipse中运行服务器,一切都很好。但是当我尝试导出项目时,我无法弄清楚如何运行它。我一直收到这个错误(根据我的运行方式而有所不同)
Exception in thread "main" java.lang.NoClassDefFoundError: xsocketserver/Main
Caused by: java.lang.ClassNotFoundException: xsocketserver.Main
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:315)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:330)
at java.lang.ClassLoader.loadClass(ClassLoader.java:250)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:398)
我已经读过这个问题与正在设置的类路径有关。我尝试了以下内容:
java -cp libs/xSocket-2.8.12.jar xsocketserver.Main
java -jar xSocketServer.jar
java -classpath xSocketServer:xSocketServer/libs/xSocket-2.8.12.jar xsocketserver.Main
加上许多其他人。 JAR中的文件结构如下:
xSocketServer.jar
-> xsocketserver
-> Main.class
-> xSocketDataHandler.class
-> META-INF
-> MANIFEST.MF
-> libs
-> xSocket-2.8.12.jar
顺便提一下,我已经尝试添加我自己的包含Class-Path
的清单文件,但是当我检查它时,它总是显示:
Manifest-Version: 1.0
Main-Class: xsocketserver.Main
我猜这是一个常见的问题,基于我在Google上看过的点击次数,但我无法理解我做错了什么。错误的导出设置可能??
答案 0 :(得分:1)
我不相信jar文件可以包含另一个jar(因为你已经包含了xSocket-2.8.12.jar)。如果xSocket是您自己的代码,请将其直接包含在“外部”jar中。
退房 http://www.velocityreviews.com/forums/t143595-jars-containing-jars.html 和 Classpath including JAR within a JAR
否则它看起来对我来说。确保你没有尝试运行jar的旧/陈旧版本。 (删除jar并确保eclipse导出一个新的。)
如何从eclipse导出.jar文件?生成的jar文件通常基于您的一个运行配置。确保使用从eclipse开始工作时使用的那个。
除非您已经尝试过,否则请尝试按照以下步骤(在以下网站列出)
http://forums.sun.com/thread.jspa?threadID=5358121
1 - 右键单击您的项目并选择导出选项。弹出一个导出窗口。
2 - 从加速窗口中选择jar文件选项,它将在窗口的java选项中。
3 - 单击JarFile选项后,将弹出一个新窗口。
4 - 选择ur jar文件的导出目标,然后单击“下一步”。
5 - 点击下一个你将看到的新屏幕后,再次点击下一个按钮。
6 - 现在你会看到一个新的屏幕,其字段名称为“主类”浏览你的主要appliaction类.main类曾经是主要方法。
7-现在选择完成。
答案 1 :(得分:0)
我遇到了类似的问题,而你的问题可能与否有关......
Jar清单文件必须是UTF-8格式。我曾经使用过Windows记事本而且没用。当我用另一个编辑器重新创建清单文件时,它运行正常。
我假设eclipse会创建UTF-8文件,但我不确定它是否会自动转换,如果它们不是那种格式
如果你确实使用了另一个编辑器来创建清单的第一个版本,请尝试删除manifest.mf并在eclipse中重新创建。
约翰