【问题标题】:Compiling and executing through commandLine shows NoClassDefFoundError when trying to find Java package尝试查找Java包时通过命令行编译和执行显示NoClassDefFoundError
【发布时间】:2011-02-26 15:21:03
【问题描述】:

我有一个尝试发送和接收对象的客户端/服务器程序。

共有三个包:服务器、客户端和共享 shared 仅包含 Message 类

我将共享包中的 Message.java 与 calcclient 包源文件和 calcserver 包源文件放在同一个文件夹中。

我使用以下行编译: javac -classpath .; (客户端或 server.java 文件的长列表) Message.java 他们可以编译。 然后我将目录更改为上一级并运行: java -classpath .; .主要

当我使用 Netbeans 运行时,整个程序正常运行。但如果我从命令行运行则不会。如果它通过命令行执行,程序将一直工作,直到它需要使用 Message 对象。然后它会显示一个 NoClassDefFoundError

我是否将正确的文件放在正确的位置?如何让程序通过命令行找到共享包?

【问题讨论】:

    标签: java compilation package noclassdeffounderror


    【解决方案1】:

    如果您在 NetBeans 中构建项目,您会看到有一个 dist 文件夹,您可以在其中找到二进制代码的项目。构建源代码后,NetBeans 指定应如何从命令行启动项目。

    如果你使用这个并且问题仍然存在,你应该将你的 Message 类重新构建为一个库,使用 NetBeans 将它链接到项目,并且项目应该使用 NetBeans 中指定的命令从命令行运行。

    如果你想手动编译你的源文件,我认为最好的解决方案是谷歌这样的东西: 手动编译Java源代码

    【讨论】:

      【解决方案2】:

      文件不在正确的位置。 Message 类属于不同的包,因此它不应该与其他类一起使用。来自http://java.sun.com/j2se/1.5.0/docs/tooldocs/findingclasses.html

      用户类是构建的类 在 Java 平台上。寻找用户 类,启动器是指 用户类路径——一个列表 目录、JAR 档案和 ZIP 包含类文件的档案。

      一个类文件有一个子路径名 反映班级的完全合格 姓名。例如,如果类 com.mypackage.MyClass 存储在 /myclasses,然后 /myclasses 必须在 用户类路径和完整路径 到类文件必须是 /myclasses/com/mypackage/MyClass.class。 如果课程存储在档案中 命名为 myclasses.jar,然后 myclasses.jar 必须在用户中 类路径,类文件必须是 存储在存档中 com/mypackage/MyClass.class。

      你有几个选择:

      最好的办法是花时间学习 Ant。 Netbeans 项目是用 Ant 构建的,这在我的书中是 Netbeans 的一个非常棒的特性,您可以在您的项目中打开 build.xml 并找到一个注释合理的说明,说明 Netbeans 为构建您的项目所做的工作。实际上,我认为从命令行运行构建的地方不会有很多,因此学习 Ant 之类的东西会很有帮助。

      下一个复杂级别是为您的共享包手动构建一个 Jar 并将其放在类路径中的某个位置。

      最基本的方法是将java文件编译成类文件,并将它们放在反映包名的适当目录中,如上面的引用中所述。

      【讨论】:

        【解决方案3】:

        如果类路径值包含空格,请引用它。

        java -classpath C:\Program Files\java\...;C:\...
                                  ^
                                  This is what's killing you slowly.
        

        试试这个方法:

        java -classpath "C:\Program Files\java\...;C:\..."
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-29
          • 1970-01-01
          • 1970-01-01
          • 2012-09-11
          • 2020-10-25
          • 2023-03-22
          • 1970-01-01
          • 2015-12-31
          相关资源
          最近更新 更多