2012-12-28 13 views
7

मुझे जावा आरएमआई के आसपास आपकी मदद की ज़रूरत है, मैंने टेबल को सॉर्ट करने के लिए उपयोग किए गए नमूना प्रोग्राम को विकसित किया। लेकिन मैं यह अपवाद है:java.rmi.UmarmarshalException: त्रुटि unmarshalling तर्क; नेस्टेड अपवाद है: java.lang.ClassNotFoundException: ServicesTableau

Erreur RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: ServicesTableau 

और यह मेरा सर्वर स्रोत कोड है:

public class Serveur { 
    public static void main(String args[]) { 

     try { 

      System.out.println("Server start ..."); 
      ServicesTableauImpl od = new ServicesTableauImpl(); 
      String url = "rmi://" + args[0] + "/ServicesTableauImpl"; 
      System.out.println("Passe"); 
      Naming.rebind(url, od); 
      System.out.println("Attente d'invocations de client/CTRL-C pour stopper"); 
     } catch (Exception e) { 
      System.out.println("Erreur " + e.getMessage()); 
     } 
    /* 
    catch(java.net.MalformatedURLException e){ 
    System.out.println("Mauvais nom de serveur"); 
    System.exit(1); 
    } 
    catch(RemoteException e){ 
    System.out.println("Pas de Rmiregistry"); 
    System.exit(1); 
    } 
    */ 
    } 
} 
+1

क्या यह कक्षा ServicesTableauImpl कक्षा पथ में उपलब्ध है? –

उत्तर

10

यही वर्ग RMI रजिस्ट्री के CLASSPATH पर उपलब्ध नहीं है। इसे ठीक करने का सबसे आसान तरीका रजिस्ट्री को उसी JVM में शुरू करना है, LocateRegistry.createRegistry(). के माध्यम से परिणाम को स्थिर क्षेत्र में संग्रहीत करें।

+0

मैं लिनक्स के तहत काम कर रहा हूं, आपकी प्रतिक्रिया के लिए धन्यवाद (मैंने rmiregistry का उपयोग किया है जो अब ठीक काम करता है) – MDIT

+0

लिनक्स उत्तर में कोई फर्क नहीं पड़ता है। – EJP

-2

यह त्रुटि सुरक्षा प्रबंधक कोड नहीं लिखने के कारण है, जिसके कारण कक्षा लोड नहीं हो सकती है। तो सुनिश्चित करें कि आप सुरक्षा प्रबंधक के लिए कोड जोड़ते हैं।  
यदि संकलक को सुरक्षा प्रबंधक नहीं मिला है तो एक नया बनाएं। मुख्य विधि में कोड जोड़ें।

if (System.getSecurityManager() == null) then 
    System.setSecurityManager(new RMISecurityManager()) 
+0

नहीं, यह नहीं है। यह कक्षा के कारण नहीं है। आपको पूरे अपवाद को पढ़ने की जरूरत है। यह केवल सुरक्षा प्रबंधक की कमी के कारण होगा यदि वह आरएमआई कोडबेस सुविधा का उपयोग कर रहा था, जो कहा नहीं गया है। – EJP

0

कुछ मामलों में, आपको डिफ़ॉल्ट पैकेज में आपको आरएमआई क्लाइंट कोड (इंटरफ़ेस और मुख्य) स्थानांतरित करने की आवश्यकता है। सर्वर पक्ष के लिए इसे दोहराएं। यह आपको समस्या का समाधान कर सकता है (आरएमआई में पैकेजिंग के साथ काम इतना स्पष्ट नहीं है)।

संबंधित मुद्दे