2012-03-08 91 views
0

我有這樣的目錄結構:的Java找不到.class文件,或

project/ 
     src/ 
      videoserver/ 
        *.java 
      storeclient/ 
        *.java 
     bin/ 
      videoserver/ 
        *.class 
      storeclient/ 
        *.class 

我當前的工作目錄是project/src/,我用命令java -cp "../bin/" videoserver.Main

這沒事我看來, ,但Java告訴我它找不到類IVideoServer。我可以在正確的文件夾中看到IVideoServer.class,並且它似乎能夠很好地找到Main類。

什麼可能導致Java無法找到IVideoServer


,似乎是導致該問題的方法是這樣的一個

public static void main(String[] args) 
{ 
    try 
    { 
     VideoServer Server = new VideoServer(); 
     videoserver.IVideoServer stub = (IVideoServer)UnicastRemoteObject.exportObject(Server, 0); 

     // Bind the remote object's stub in the registry 
     Registry registry = LocateRegistry.getRegistry("server-url", 9090); 
     registry.bind("VideoServer", stub); 
     System.err.println("Server ready"); 
    } 
    catch (Exception e) 
    { 
     System.err.println("Server exception: " + e.toString()); 
     e.printStackTrace(); 
    } 
} 

我已經編譯了一個所有參與javac類的。


這是一個完整的異常和堆棧跟蹤,因爲它返回到我

服務器例外:java.rmi.ServerException:的RemoteException發生在服務器線程;嵌套的例外是:

java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
java.lang.ClassNotFoundException: videoserver.IVideoServer 
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
java.lang.ClassNotFoundException: videoserver.IVideoServer 
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:396) 
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250) 
    at sun.rmi.transport.Transport$1.run(Transport.java:159) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.Transport.serviceCall(Transport.java:155) 
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) 
    at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255) 
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233) 
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:359) 
    at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source) 
    at videoserver.Main.main(Main.java:17) 
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: videoserver.IVideoServer 
    at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source) 
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:386) 
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250) 
    at sun.rmi.transport.Transport$1.run(Transport.java:159) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.Transport.serviceCall(Transport.java:155) 
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: java.lang.ClassNotFoundException: videoserver.IVideoServer 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:247) 
    at sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:711) 
    at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:655) 
    at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:592) 
    at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:628) 
    at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:294) 
    at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:238) 
    at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1530) 
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1492) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) 
... 12 more 
+0

..沒有光檢測機制(即眼睛)? – 2012-03-08 20:16:11

+0

請向我們展示您的代碼,特別是Java所抱怨的行。有沒有進口問題? – 2012-03-08 20:17:55

+0

其中單詞是Java你說的,它找不到類? – 2012-03-08 20:18:14

回答

0

從src文件夾中,你試過java -cp . videoserver.Main ??

試試這個,javap videoserver.Main

+0

是的,這導致了相同的錯誤消息:( – AndyBursh 2012-03-08 20:24:42

+0

確保bin在CLASSPATH中,然後試試這個,javap videoserver.Main – 2012-03-08 20:51:26

+0

這給了我一個'從Main.java「編譯成的類簽名,構造函數簽名和主簽名,這是預期的輸出嗎? – AndyBursh 2012-03-08 20:55:27