异常-java.lang.NoClassDefFoundError
所以,我搜索了这个问题。。 我的目录和文件结构如下(所有*.java文件都有异常-java.lang.NoClassDefFoundError,java,Java,所以,我搜索了这个问题。。 我的目录和文件结构如下(所有*.java文件都有serverpackage): run2包含: find . -name "*.class" -type f -delete javac -classpath .:server:server/lib/mysqlconn.jar server/Server.java java -classpath .:server:server/lib/mysqlconn.jar server.Server 如您所见,它运行Server
server
package):
run2包含:
find . -name "*.class" -type f -delete
javac -classpath .:server:server/lib/mysqlconn.jar server/Server.java
java -classpath .:server:server/lib/mysqlconn.jar server.Server
如您所见,它运行Server
。去那里看看:
package server;
// imports
public class Server {
public static final int BUFFSIZE = 32;
public static void main (String[] args) throws IOException {
ServerConnectionManager server = new ServerConnectionManager(1234);
server.start();
server.acceptConnections();
server.shutdown();
}
}
这门课没什么奇怪的,对吧?不管怎样,我是这样想的。
在这个类中,正如我们所看到的,Server
createServerConnectionManager
并调用一些函数。
请查看acceptConnections
:
public void acceptConnections() {
while(true) {
try {
Socket clientConnection = connection.accept();
ClientThread client = new ClientThread(clientConnection);
/*clients.add(client);
client.start();
System.out.println("[INF] Client connected");
System.out.println("[INF] Summary: " + clients.size() + " clients connected");*/
} catch (IOException e) {
System.out.println("[ERR] Accepting client connection failed");
}
}
}
我评论了几行。我现在真的不需要它们
有关问题的更多信息:
当我运行run2
-服务器运行正常netstat
显示等待连接的服务器
但当我运行客户端并尝试连接到服务器时,它会向我显示下一个错误:
Exception in thread "main" java.lang.NoClassDefFoundError: server/ClientThread
at server.ServerConnectionManager.acceptConnections(ServerConnectionManager.java:36)
at server.Server.main(Server.java:15)
Caused by: java.lang.ClassNotFoundException: server.ClientThread
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 2 more
我不明白,为什么我会有这个异常
?
查看目录和文件ClientThread.java
存在并放置在server
目录中,并具有server
包。编译没有显示任何错误
我做错了什么
客户端有一个连接类
package client;
// imports
public class ClientConnectionManager {
public Socket connection;
public String host;
public Integer port;
public Boolean connected;
public ClientConnectionManager(String h, Integer p) {
host = h;
port = p;
}
public void connect() {
try {
connection = new Socket(host, port);
} catch (IOException e) {
System.out.println("[INF] Failed connect to server");
}
}
public void disconnect() {
try {
connection.close();
} catch (IOException e) {
System.out.println("[ERR] Connection closing failed");
}
}
}
您还需要编译
ClientThread.java
在运行之前也添加此选项
javac -classpath .:server:server/lib/mysqlconn.jar server/ClientThread.java
这是管理类路径和编译的痛苦方式,最好使用一些IDE和构建工具(maven)您还需要编译
ClientThread.java
在运行之前也添加此选项
javac -classpath .:server:server/lib/mysqlconn.jar server/ClientThread.java
这是管理类路径和编译的痛苦方式,最好使用一些IDE和构建工具(maven)您还需要编译
ClientThread.java
在运行之前也添加此选项
javac -classpath .:server:server/lib/mysqlconn.jar server/ClientThread.java
这是管理类路径和编译的痛苦方式,最好使用一些IDE和构建工具(maven)您还需要编译
ClientThread.java
在运行之前也添加此选项
javac -classpath .:server:server/lib/mysqlconn.jar server/ClientThread.java
这是一种痛苦的管理类路径和编译的方法,最好使用一些IDE和构建工具(maven)
服务器。java
不导入ClientThread.java
或在服务器类内部使用ClientThread,因此编译器会忽略编译它
为了解决这个问题,只需在用于编译项目的批处理中包含ClientThread.java
javac-classpath.:server:server/lib/mysqlconn.jar server/ClientThread.java
我建议您研究Through
服务器。java
不导入ClientThread.java
或在服务器类中使用ClientThread,因此编译器会忽略编译它
为了解决这个问题,只需在用于编译项目的批处理中包含ClientThread.java
javac-classpath.:server:server/lib/mysqlconn.jar server/ClientThread.java
我建议您研究Through
服务器。java
不导入ClientThread.java
或在服务器类中使用ClientThread,因此编译器会忽略编译它
为了解决这个问题,只需在用于编译项目的批处理中包含ClientThread.java
javac-classpath.:server:server/lib/mysqlconn.jar server/ClientThread.java
我建议您研究Through
服务器。java
不导入ClientThread.java
或在服务器类中使用ClientThread,因此编译器会忽略编译它
为了解决这个问题,只需在用于编译项目的批处理中包含ClientThread.java
javac-classpath.:server:server/lib/mysqlconn.jar server/ClientThread.java
我建议您研究一个虽然了解NoClassDefFoundError是一个“垃圾”异常(许多不同的原因),实际错误甚至可能不在命名类中(而是它引用的某个类)。我也这样认为。但是我在java方面的知识还不够(新手)。。。如何获得有关此错误的更详细信息?通常问题是由于jar文件不匹配造成的——例如,abc.jar引用某些第三方API的版本6,而xyz.jar引用版本7。但在这个主题上有许多可能的变化,除此之外还有其他一些变化。一个真正容易混淆的问题是编译的.java文件中的包名错误,或者只是在文件Abc.java.Hmm中有类Abc。。。我去检查打字错误mistakes@HotLicks,你说得对。
ClientThread
类或其他类中出错。shell脚本中的错误:(当我删除下一行时,所有工作正常-find.-name“*.class”-键入f-delete
。谢谢,您的答案非常全面。请将您的评论排序为anwer,我将其标记为acceptedUnderstand NoClassDefFoundError是一个“垃圾”异常(许多不同的原因),而实际的错误甚至可能不在命名类中(而是它引用的某些类)。我也这样认为。但我对java(新手)了解不够…如何获得有关此错误的更详细信息?通常问题是由于jar文件不匹配造成的--例如,abc.jar引用某些第三方API的版本6,而xyz.jar引用版本7。但是该主题上有许多可能的变体,除此之外还有其他一些变体。真正让人困惑的一个原因是使用了错误的包在编译的.java文件中,或者只是在文件Abc.java.Hmm中使用类Abc…我去检查输入错误mistakes@HotLicks,您是对的。ClientThread
class或其他中出现错误。shell脚本中出现错误:(当我删除下一行时,所有工作正常-find.-name“*.class”-键入f-delete
。谢谢你,你的答案非常全面。请将你的评论排序为anwer,我将其标记为acceptedUnderstand NoClassDefFoundError是一个“垃圾”异常(许多不同的原因),实际错误甚至可能不在命名类中(而是它引用的某些类)。我也这样认为。但是