java - ओएस से ईवेंट प्राप्त करें



macos jni (1)

यह समाधान कोको फ्रेमवर्क का उपयोग कर रहा है। कोको को नापसंद किया गया है और मुझे किसी अन्य वैकल्पिक हल के बारे में पता नहीं है। लेकिन नीचे की तरह जादू की तरह काम करता है

अंत में मुझे Carbon फ्रेमवर्क का उपयोग करते हुए समाधान मिला। यहां मेरा MCarbon इंटरफ़ेस है जो मुझे कॉल की आवश्यकता है I

  public interface MCarbon extends Library {
  MCarbon INSTANCE = (MCarbon) Native.loadLibrary("Carbon", MCarbon.class);
  Pointer GetCurrentEventQueue();
  int SendEventToEventTarget(Pointer inEvent, Pointer intarget);
  int RemoveEventFromQueue(Pointer inQueue, Pointer inEvent);
  void ReleaseEvent(Pointer inEvent);
  Pointer AcquireFirstMatchingEventInQueue(Pointer inQueue,NativeLong inNumTypes,EventTypeSpec[] inList, NativeLong inOptions);
  //... so on
  }

समस्या का समाधान निम्न फ़ंक्शन का उपयोग करके हल किया जाता है:

 NativeLong ReceiveNextEvent(NativeLong inNumTypes, EventTypeSpec[] inList, double inTimeout, byte inPullEvent, Pointer outEvent);

यह काम करता है प्रलेखन के अनुसार -

This routine tries to fetch the next event of a specified type.
If no events in the event queue match, this routine will run the
current event loop until an event that matches arrives, or the
timeout expires. Except for timers firing, your application is
blocked waiting for events to arrive when inside this function.

इसके अलावा यदि नहीं प्राप्त ReceiveNextEvent , तो अन्य कार्यों जैसे ऊपर दिए गए MCarbon वर्ग में उपयोगी होगा।

मुझे लगता है कि Carbon ढाँचा दस्तावेज़ीकरण समस्या को सुलझाने के लिए अधिक अंतर्दृष्टि और लचीलेपन देगा। Carbon अलावा, मंचों में लोगों ने Cocoa का उपयोग करने के बारे में हल करने का उल्लेख किया है, लेकिन मुझे पता नहीं है

संपादित करें: टेक्नोमर्ज के लिए धन्यवाद, यहां अधिक जानकारी

मैं खिड़कियों पर काम करता हूं, लेकिन मै मैक पर यहां फंस गया हूं। मेरे पास कैनन एसडीके है और इसके ऊपर एक JNA आवरण बनाया है। यह विंडोज़ पर अच्छी तरह से काम करता है और मैक के साथ कुछ मदद की ज़रूरत है एसडीके में, ऐसा फ़ंक्शन होता है जहां कोई कॉलबैक फ़ंक्शन दर्ज कर सकता है। असल में जब एक घटना कैमरा में होती है, तो यह कॉलबैक फ़ंक्शन कॉल करता है।

खिड़कियों पर, पंजीकरण के बाद, मुझे ईवेंट प्राप्त करने और इस घटना को प्रेषित करने के लिए User32 का उपयोग करने की आवश्यकता है:

private static final User32 lib = User32.INSTANCE;
boolean hasMessage = lib.PeekMessage( msg, null, 0, 0, 1 ); // peek and remove
if( hasMessage ){
    lib.TranslateMessage( msg ); 
    lib.DispatchMessage( msg ); //message gets dispatched and hence the callback function is called
}

एपीआई में, मै मैक में समान श्रेणी नहीं खोजता हूं। मैं इस बारे में कैसे जाना है ??

पीएस: यूनिक्स के लिए JNA एपीआई व्यापक है और मैं समझ नहीं पाया कि क्या देखना है। संदर्भ मदद कर सकता है





jna