2011-04-06 15 views
14

मेरी Windows मशीन पर com.sun.tools.attach API का उपयोग करते हैं, मैं निम्नलिखित त्रुटि जब करने के लिएजावा एपीआई संलग्न करें: बदलते java.library.path गतिशील

VirtualMachine.list() 

जावा कोई कॉल करने से मिलता है। lang.UnsisfisfiedLinkError: java.library.path में कोई अनुलग्नक

कारण अनुपलब्ध attach.dll है। Attach.dll $JRE/bin/ में स्थित है। -Djava.library.path=[Directory to the attach.dll] के साथ अपना जावा प्रोग्राम शुरू करते समय सबकुछ त्रुटि आउटपुट के बिना काम करता है।

अब, मैं नहीं चाहता कि प्रत्येक जावा प्रोग्राम इस बदसूरत JVM पैरामीटर को शुरू करे। इसलिए मेरे सवालों हैं:

  1. मेरी मशीन सही कॉन्फ़िगर नहीं है और $JRE/bin/ पुस्तकालय रास्ते में वैसे भी होना चाहिए?

  2. यदि नहीं, तो मैं गतिशील रूप से पथ कैसे जोड़ सकता हूं? System.setProperties("java.library.path",StringOfThePathToTheAttach.dll); काम नहीं करता है। लाइब्रेरी पथ बदल दिया गया है, लेकिन त्रुटि apperas वैसे भी। क्या सुरक्षा प्रबंधक या जेवीएम के साथ ऐसा कुछ है?

+0

आप पुस्तकालय पथ बदल के बाद, आप एक नया classloader उपयोग कर रहे हैं? –

+0

@ जोसेफ-ओटिंगर: नहीं, मुझे लगता है मुझे चाहिए? –

उत्तर

5

आपका System.setProperty("java.library.path", StringOfThePathToTheAttach.dll); काम करना चाहिए। मेरा अनुमान है कि आप इसे बहुत देर से बुला रहे हैं। दूसरे शब्दों में, संपत्ति सेट करने से पहले डीएलएल तक पहुंचने का प्रयास है।

क्या आप कोड में सेट होने के बाद और अपराधी विधि कॉल से पहले java.library.path के लिए वर्तमान मान आउटपुट कर सकते हैं?

यानी यदि आप "संपत्ति सेट करने के बाद" देखने से पहले "attach.dll कॉल से पहले" आउटपुट देखते हैं, तो आप जानते हैं कि आपकी समस्या कहां है।

संपादित करें: - कोड का उल्लंघन करने वाली लाइन से पहले फिर से,

एक बेहतर देशी पुस्तकालयों को इंगित करने के लिए रास्ता System.load(StringOfThePathToTheAttach.dll) उपयोग करने के लिए है। जब JVM शुरू होता है

+0

@ टेडी-जीह मुझे यकीन नहीं है, अगर यह डीएलएल फ़ाइल लोड करने का मेरा काम है। मेरे उबंटू मशीन पर सब कुछ संलग्न करने के बाद। लाइब्रेरी पथ पहले से ही जुड़ा हुआ है। मुझे लगता है कि मेरी विंडोज़ मशीन बस खराब तरीके से कॉन्फ़िगर की गई थी। –

5
System.setProperty("java.library.path", System.getProperty("java.library.path") + File.pathSeparator + FOLDER_THAT_CONTAINS_ATTACH_DLL); 
+5

यदि आप दाईं ओर स्क्रॉल नहीं करते हैं तो यह वास्तव में एक भयानक समाधान है;) – JustinKSU

7

बस एक कड़ी है कि आपके सवाल का

का जवाब हो सकता है पाया "java.library.path केवल एक बार पढ़ा जाता है। आप System.setProperty का उपयोग कर इस संपत्ति को बदलते हैं, जीता ' कोई फर्क नहीं पड़ता। "

http://fahdshariff.blogspot.jp/2011/08/changing-java-library-path-at-runtime.html

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