2012-06-11 9 views
5

मैं जावा आरएमआई में विकसित एक डेस्कटॉप एप्लिकेशन चलाने की कोशिश कर रहा हूं। जबकि मैं इस एप्लिकेशन को ग्रहण में निष्पादित करने का प्रयास कर रहा हूं, मुझे निम्न त्रुटि मिल रही है। अग्रिम में कृपया कोई मेरी मदद करें।थ्रेड "मुख्य" java.security.AccessControlException में अपवाद: एक्सेस अस्वीकार (java.util.PropertyPermission * पढ़ें, लिखें)

Exception in thread "main" java.security.AccessControlException: access denied (java.util.PropertyPermission * read,write) 
    at java.security.AccessControlContext.checkPermission(Unknown Source) 
    at java.security.AccessController.checkPermission(Unknown Source) 
    at java.lang.SecurityManager.checkPermission(Unknown Source) 
    at java.lang.SecurityManager.checkPropertiesAccess(Unknown Source) 
    at java.lang.System.getProperties(Unknown Source) 
    at .HeadOfficeManager.Manager.main(Manager.java:103) 

यहां कोड है।

public static void main(String args[]) 
{ 
    Manager frame = new Manager(); 
    frame.setVisible(true); 
    // frame.show(); old 1.4 

    // Create and install a security manager 
    if (System.getSecurityManager()== null) 
    { 
     System.setSecurityManager(new RMISecurityManager()); 
    } 
    try 
    { 
     Properties prop = System.getProperties(); 
     String httpPath = prop.getProperty("HTTPPath"); 
     new ClassFileServer(80, httpPath); 
    } 
    catch (IOException e) 
    {} 

    try 
    { 
     java.rmi.registry.LocateRegistry.createRegistry(1099); 
     System.out.println("RMI registry ready."); 
    } 
    catch (Exception e) 
    { 
     System.out.println("Exception starting RMI registry:"); 
     e.printStackTrace(); 
    } 
    try 
    { 
     RMIHandler = new ManagerRMIHandler(); 

     // Bind the remote object's stub in the registry 
     Registry registry = LocateRegistry.getRegistry(); 
     registry.rebind("HeadOfficeManager", RMIHandler); 

     System.err.println("Server ready"); 
    } 
    catch (Exception e) 
    { 
     System.err.println("Server exception: " + e.toString()); 
     e.printStackTrace(); 
    } 

उत्तर

10
  1. ग्रहण में आवेदन पर राइट क्लिक करें और रन कॉन्फ़िगरेशन पर क्लिक करें।
  2. वर्चुअल मशीन तर्क -Djava.security.policy =java.policy.applet के रूप में जोड़ें।
  3. एक फ़ाइल बनाएं, इसे java.policy.applet के रूप में नाम दें।
  4. उस फ़ाइल में नीचे पंक्तियां जोड़ें।

    grant 
    { 
        permission java.security.AllPermission; 
    }; 
    
  5. इसे सहेजें और एप्लिकेशन चलाएं।

यह आपके जावा एप्लिकेशन को सभी सुरक्षा अनुमतियां देगा।

2

आपने सुरक्षा प्रबंधक स्थापित किया है और आपने अपने कोड को निष्पादित करने के लिए अपनी .policy फ़ाइल में पर्याप्त अनुमति नहीं दी है। अपवाद आपको बताता है कि कौन सी अनुमति गुम है, लेकिन शायद अधिक हैं। अपने आवेदन को -Djava.security.debug = एक्सेस के साथ चलाएं, यह देखने में विफलता कि अन्य सुरक्षा समस्याएं क्या हैं।

लेकिन असली सवाल यह है कि सुरक्षा प्रबंधक क्यों है? यदि आप आरएमआई कोडबेस सुविधा का उपयोग कर रहे हैं, तो आपको केवल आरएमआई बिंदु दृश्य से आरएमआई सर्वर में इसकी आवश्यकता है। अन्यथा आपको इसे हटाने पर विचार करना चाहिए।

इसके अलावा आपको createRegistry का परिणाम कहीं भी स्टोर करना होगा जहां यह कचरा-संग्रह नहीं होगा, उदा। एक स्थिर चर में। और एक बार ऐसा करने के बाद, getRegistry() कॉल अनावश्यक है।

+0

धन्यवाद, मैं इस एप्लिकेशन को चलाने के लिए ग्रहण का उपयोग कर रहा हूं। क्या मैं ग्रहण में अनुमतियों को सत्यापित कर सकता हूं ?? मैं एक बार फिर से RMI ..thanks लिए बहुत नया हूँ – bhuvanpavan

+0

मैं नीति फ़ाइल बनाई 'अनुदान { \t // अब \t अनुमति java.security.AllPermission के लिए सब कुछ की अनुमति दें; }; ' भले ही यह एक ही अपवाद दे ... मैं परियोजना के तहत उस नीति फाइल का निर्माण करता हूं। – bhuvanpavan

+0

अभी भी इस समस्या को हल नहीं किया गया है। क्या कोई इसे समझ सकता है .......... अग्रिम धन्यवाद .. – bhuvanpavan

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