Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
异常-java.lang.NoClassDefFoundError_Java - Fatal编程技术网

异常-java.lang.NoClassDefFoundError

异常-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

所以,我搜索了这个问题。。 我的目录和文件结构如下(所有*.java文件都有
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
create
ServerConnectionManager
并调用一些函数。 请查看
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是一个“垃圾”异常(许多不同的原因),实际错误甚至可能不在命名类中(而是它引用的某些类)。我也这样认为。但是