के माध्यम से एक एप्लेट से एक DLL कॉलिंग मैं काम का टुकड़ा है कि कुछ अपरिचित क्षेत्र में पार एक "अवधारणा का सबूत है"। मुझे एक ईएफटीपीओएस मशीन को हमारे इंट्रानेट पर ब्राउज़र में एप्लेट के रूप में चलाने वाले एप्लिकेशन से जोड़ने के लिए काम सौंपा गया है।JNI
मैंने इस पल के लिए EFTPOS डीएल को अनदेखा कर दिया है और मेरी पसंद की भाषा (डेल्फी) में एक साधारण जेएनआई सजाया डीएलएल बनाया है जो सी: \ में एक टेक्स्ट फ़ाइल में स्ट्रिंग लॉग करता है और मैं इसे सफलतापूर्वक कॉल कर सकता हूं स्थानीय जावा अनुप्रयोग।
हालांकि, जब मैं एक ही काम करने के लिए एक एप्लेट बना देता हूं, तो इसे एक .JAR में संकलित करें, JAR & पर हस्ताक्षर करें वेब पेज पर जावास्क्रिप्ट के माध्यम से एप्लेट में विधि को कॉल करने का प्रयास करें।
एक वरिष्ठ जावा पुरुष के साथ मैं काम कर रहा हूँ लगता नहीं है कि यह यह स्वाभाविक है "" बुराई एक एप्लेट यह करने के लिए अनुमति देने के लिए, क्योंकि यह काम करने के लिए प्राप्त करने के लिए संभव नहीं होगा।
एक प्रवेश आप एक java.policy फाइल में डाल सकते हैं LoadLibrary अनुमति देने के लिए नहीं है। साथ ही allPermission & के रूप में मैं बिल्कुल भी जावा कंसोल में निम्न त्रुटि का पता लगाने के उत्पादन फायदा उन पंक्तियों के साथ रूपों की एक पूरी मेजबान की कोशिश की है: जावा:
java.lang.ExceptionInInitializerError
at app.TestApplet.LogAString(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.plugin.javascript.JSInvoke.invoke(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.plugin.javascript.JSClassLoader.invoke(Unknown Source)
at sun.plugin.com.MethodDispatcher.invoke(Unknown Source)
at sun.plugin.com.DispatchImpl.invokeImpl(Unknown Source)
at sun.plugin.com.DispatchImpl$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin.com.DispatchImpl.invoke(Unknown Source)
Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission loadLibrary.DLoggerImpl)
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.checkLink(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at app.DLogger.<clinit>(Unknown Source)
... 16 more
java.lang.Exception: java.lang.ExceptionInInitializerError
at sun.plugin.com.DispatchImpl.invokeImpl(Unknown Source)
at sun.plugin.com.DispatchImpl$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin.com.DispatchImpl.invoke(Unknown Source)
कुंजी लाइन "की वजह से हो रहा है। security.AccessControlException: एक्सेस अस्वीकार (java.lang.RuntimePermission loadLibrary.DLoggerImpl) "जो एक अनुमति समस्या का तात्पर्य है। यह हो सकता है कि मैं नीति फ़ाइल गलत हो रही है - या हस्ताक्षर करने के गलत - या सामान की तरह या यह हो सकता है कि जावा hardwired है क्योंकि सुरक्षा जोखिम का एक एप्लेट के लिए अनुमतियों के उन प्रकार की अनुमति नहीं।
मेरा प्रश्न मैं अपना समय बर्बाद कर रहा है? क्या यह & किया जा सकता है यदि हां, तो कैसे?
प्रत्याशा में धन्यवाद
माइक
मुझे लगता है कि यह उल्लेखनीय है कि हमारे जावा एप्लेट जो डीएलएल लोड करता है, ग्राहकों का एक बड़ा प्रतिशत (9 5%) किसी भी समस्या के बिना एप्लेट निष्पादित कर सकता है। तो इस व्यवहार के लिए कुछ अन्य स्पष्टीकरण होना चाहिए, कुछ प्रकार के ब्राउज़र/जेवीएम/ओएस संयोजन जो इस प्रभाव का कारण बनते हैं। – davidecr