有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

cmd JAVA新手警报:尝试运行JAVA类并获取ClassNotFoundException

Java新手。我正试图从cmd行运行java主类并返回ClassNotFoundException

java -cp class c:\development\eclipse\workspace\Library-Manager-Server\bin\demo\rmi\librarymanager\server\LibraryManagerServer 

-Djava.security.policy="C:\Development\Eclipse\Workspace\Library-Manager-Server\security.policy" 

-Djava.rmi.server.codebase="file:/C:/Development/Eclipse/Workspace/Library-Manager-Server/bin/ file:/C:/Development/Eclipse/Workspace/Library-Manager-Common/bin/"

该类肯定在bin中(eclipse将其放在bin中),但由于某种原因(可能很简单),在我运行上面的cmd行时找不到它

感谢您的帮助

编辑#1:正如你们中的一些人可能猜到的那样,类名是demo.rmi.librarymanager.server.LibraryManagerServer

编辑#2:好的-多亏了大家的建议,我想这次我的语法是正确的,但我仍然得到了ClassNotFoundException但是在公共包中的另一个类上:

demo.rmi.librarymanager.common.Library

以下是新的命令行:

java -cp c:/development/eclipse/workspace/Library-Manager-Server/bin demo.rmi.librarymanager.server.LibraryManagerServer 

-Djava.security.policy="C:/Development/Eclipse/Workspace/Library-Manager-Server/security.policy" 

-Djava.rmi.server.codebase="file:/C:/Development/Eclipse/Workspace/Library-Manager-Server/bin file:/C:/Development/Eclipse/Workspace/Library-Manager-Common/bin"

我应该在-cp之后添加c:/development/eclipse/workspace/Library-Manager-Common/bin路径(其中demo.rmi.librarymanager.common.Library存在)和c:/development/eclipse/workspace/Library-Manager-Server/bin作为命令行参数吗

感谢大家的帮助和耐心——我正在开发一个RMI应用程序,在我使用RMI plugin在eclipse内部工作之前一切都很好,但现在我有点困难,因为我对java相当陌生(正如您从我的问题中看到的!)

编辑#3:好的,我让它工作了:

java -cp c:/development/eclipse/workspace/Library-Manager-Server/bin;c:/development/eclipse/workspace/Library-Manager-Common/bin 

demo.rmi.librarymanager.server.LibraryManagerServer 

-Djava.security.policy="C:/Development/Eclipse/Workspace/Library-Manager-Server/security.policy" 

-Djava.rmi.server.codebase="file:/C:/Development/Eclipse/Workspace/Library-Manager-Server/bin file:/C:/Development/Eclipse/Workspace/Library-Manager-Common/bin"

感谢大家的谦逊


共 (3) 个答案

  1. # 1 楼答案

    从你的命令行我猜:

    java -cp c:/development/eclipse/workspace/Library-Manager-Server/bin
    -Djava.security.policy="C:/Development/Eclipse/Workspace/Library-Manager-Server/security.policy" 
    -Djava.rmi.server.codebase="file:/C:/Development/Eclipse/Workspace/Library-Manager-Server/bin/ file:/C:/Development/Eclipse/Workspace/Library-Manager-Common/bin/"
    demo.rmi.librarymanager.server.LibraryManagerServer 
    

    Java路径使用/作为分隔符,即使在Widnow上,类路径也应该指向包层次结构的根,要运行的类以包表示法相对于类路径给出

  2. # 2 楼答案

    java命令行是:

    Usage: java [-options] class [args...]
               (to execute a class)
       or  java [-options] -jar jarfile [args...]
               (to execute a jar file)
    
    where options include:
        -client       to select the "client" VM
        -server       to select the "server" VM
        -hotspot      is a synonym for the "client" VM  [deprecated]
                      The default VM is client.
    
        -cp <class search path of directories and zip/jar files>
        -classpath <class search path of directories and zip/jar files>
                      A ; separated list of directories, JAR archives,
                      and ZIP archives to search for class files.
    

    我想我明白你的问题了——“class”不是一个关键词;它是您必须替换的完全限定类名

    如果类文件位于bin中,则该命令可能如下所示:

    java -cp bin myClass
    

    所以也许

    java -cp bin demo.rmi.librarymanager.server.LibraryManagerServer
    

    如果您在Eclipse项目的目录中

    请注意,Eclipse为类所在的位置提供了设置(您可以覆盖这些设置)。我发现不同版本的Eclipse在默认情况下有不同的版本。所以我看到了binclasses或者(当我使用maven时)target/classes

  3. # 3 楼答案

    这可能会奏效:

    java -cp c:\development\eclipse\workspace\Library-Manager-Server\bin\ demo.rmi.librarymanager.server.LibraryManagerServer 
    

    这假设您想要运行包demo.rmi.librarymanager.server中的类LibraryManagerServer

    请注意,如果在包中使用类(除了简短的测试或学习代码外,这是可取的),则必须

    • 使用类的完全限定名(包括包)告诉java。exe要开始什么课程
    • 将与包层次结构对应的目录层次结构所在的base目录作为类路径