मैं एक सीरियल पोर्ट से डेटा पढ़ने के लिए RXTX का उपयोग कर रहा हूं। पढ़ने एक धागा निम्नलिखित तरीके से पैदा की भीतर किया जाता है:इनपुट स्ट्रीम पर अवरुद्ध कॉल को समाप्त नहीं करने में थ्रेड बाधित
CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(port);
CommPort comm = portIdentifier.open("Whatever", 2000);
SerialPort serial = (SerialPort)comm;
...settings
Thread t = new Thread(new SerialReader(serial.getInputStream()));
t.start();
SerialReader वर्ग Runnable लागू करता है और सिर्फ अनिश्चित काल के लिए लूप होता है, बंदरगाह से पढ़ने और अन्य अनुप्रयोगों के लिए इसे बंद कर भेजने से पहले उपयोगी संकुल में डेटा का निर्माण। हालांकि, मैं यह निम्नलिखित सादगी के लिए नीचे कम किया है:
public void run() {
ReadableByteChannel byteChan = Channels.newChannel(in); //in = InputStream passed to SerialReader
ByteBuffer buffer = ByteBuffer.allocate(100);
while (true) {
try {
byteChan.read(buffer);
} catch (Exception e) {
System.out.println(e);
}
}
}
एक उपयोगकर्ता एक स्टॉप बटन, निम्नलिखित कार्यक्षमता आग है कि सिद्धांत रूप में इनपुट धारा को बंद करने और अवरुद्ध byteChan.read से बाहर तोड़ चाहिए (क्लिक करता है बफर) कॉल करें।
public void stop() {
t.interrupt();
serial.close();
}
हालांकि, जब मैं इस कोड चलाने के लिए, मैं कभी नहीं एक ClosedByInterruptException, जो एक बार इनपुट स्ट्रीम बंद कर देता है सक्रिय किया जाना चाहिए मिलती है: कोड इस प्रकार है। इसके अलावा, serial.close() पर कॉल पर निष्पादन ब्लॉक - क्योंकि अंतर्निहित इनपुट स्ट्रीम अभी भी पढ़ने कॉल पर अवरुद्ध है। मैंने बाइटकहान.क्लोज़() के साथ इंटरप्ट कॉल को बदलने की कोशिश की है, जिसके बाद एक असिंक्रोनस क्लोज़ एक्सेप्शन का कारण बनना चाहिए, हालांकि, मुझे वही परिणाम मिल रहे हैं।
मुझे जो भी याद आ रही है उसमें कोई मदद की सराहना की जाएगी।
यह निश्चित रूप से काम करता है। धन्यवाद। –