2012-07-07 18 views
5

के संसाधनों को जारी करना मैं निर्देशिका देखने के लिए जावा 7 वॉच सेवा का उपयोग कर रहा हूं। मैं लगातार जो निर्देशिका देख रहा हूं उसे बदलता हूं। मैं अपवाद में चलाता हूं:जावा 7 वॉच सेवा

java.io.IOException: नेटवर्क BIOS कमांड सीमा तक पहुंच गई है।

50 निर्देशिकाओं के बाद। मुझे यकीन है कि मैं एक नया निर्माण करने से पहले प्रत्येक वॉच सेवा पर करीबी() को कॉल करता हूं।

क्या किसी को वॉच सेवा प्रदान करने का उचित तरीका पता है ताकि आप इस सीमा में भाग न सकें?

धन्यवाद,

डेव

उत्तर

3

मुझे लगता है कि सभी आपको बस इतना करना close() सेवा है। मुझे पता है कि आपने कहा था कि आप सोचते हैं कि आप इसे पहले से ही करते हैं, लेकिन मुझे संदेह है कि आप कुछ खो रहे हैं। उदाहरण के लिए, आप अपवाद के मामले में सेवा उदाहरण बंद करने में असफल हो सकते हैं। आपको वॉच सर्विस सेवा को अन्य आईओ संसाधनों के रूप में देखना चाहिए और अंततः ब्लॉक में इसे बंद करना चाहिए; जैसे

WatchService ws = ... 
try { 
    // use it ... 
} finally { 
    ws.close(); 
} 

या जावा 7 "संसाधन के साथ प्रयास करें" वाक्यविन्यास का उपयोग करना।

try (WatchService ws = ...) { 
    // use it ... 
} 

जब WatchService बंद कर दिया है, तो तुरंत किसी भी हे/एस स्तर संसाधन हैं कि उनके पास मुक्त कर देना चाहिए।


केवल अन्य संभावना है कि आप WatchService कार्यान्वयन में कुछ जावा बग में चलाने की है।

1

यदि मैं जावाडोक सही पढ़ रहा हूं, तो आपको केवल एक वॉच सेवा की आवश्यकता है, जिसे आप ऐप के अंत में प्रारंभ और बंद() पर तत्काल प्रारंभ करते हैं।

आप सबमिट करते हैं। उन पथों और घटनाओं को पंजीकृत करें जिन्हें आप एक समय में पंजीकृत करना चाहते हैं, और वॉचकी वापस प्राप्त करें। आप इन वॉचकिज़ को लगभग पथ द्वारा कुंजी वाले एक समवर्ती मैप में रखते हैं।

जब आप एक को हटाना चाहते हैं, तो वॉचकी पर रद्द करें() को कॉल करें और मानचित्र से हटा दें।

WatchService

Path.Register

WatchKey

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