2016-11-22 14 views
7

बढ़ रहा है एनिमेट बंद हो जाता है, सभी एनिमेटेड GIF (javax.swing.ImageIcon एक javax.swing.JLabel अंदर) एनिमेट जब तक माउस को ले जाकर बंद हो जाता है बंद हो जाता है।GIF जबकि गेमिंग माउस

यह केवल पर MacOS एक ड्राइवर के साथ एक गेमिंग माउस के साथ होता है (एक रॉकेट-कोने XTD और दो कंप्यूटर पर एक Razer गेमिंग माउस के साथ यह परीक्षण किया)। जब मैं अन्य चूहों का उपयोग करता हूं तो सब कुछ ठीक काम करता है।

गेमिंग चूहे एस को actionPerformed() विधियों को कॉल करना बंद करने के लिए भी कारण बनाता है। इस समस्या के लिए I opened a thread here, लेकिन इसके बजाय java.util.TimerTask का उपयोग करके हल किया जा सकता है। (संपादित करें: क्योंकि JFrame फिर से रंगना नहीं है जब तक माउस को ले जाकर बंद हो जाता है वास्तव में TimerTask भी इसे ठीक नहीं है।)

लेकिन मैं GIFs एनिमेट के लिए कोई विकल्प नहीं पाया। मैं विकल्प का उपयोग करने की बजाय समस्या को हल करने में अधिक दिलचस्पी लेता हूं हालांकि मैं एक कामकाजी विकल्प के लिए भी आभारी हूं।

कोड:

import java.lang.reflect.InvocationTargetException; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.SwingUtilities; 

public class Mouse { 
    public static void main(String[] args) { 
     try { 
      SwingUtilities.invokeAndWait(new Runnable() { 
       public void run() { 
        new Mouse(); 
       } 

      }); 
     } catch (InvocationTargetException e) { 
      e.printStackTrace(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 

    public Mouse() { 
     JFrame frame = new JFrame(); 
     JLabel label = new JLabel(new ImageIcon(getClass().getResource("waiting.gif"))); 

     frame.setSize(500, 500); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 

     frame.add(label); 
    } 
} 

रनिंग आवेदन:

enter image description here

MCVE:

import java.lang.reflect.InvocationTargetException; 
import java.net.*; 
import javax.swing.*; 

public class Mouse { 
    public static void main(String[] args) { 
     try { 
      SwingUtilities.invokeAndWait(new Runnable() { 
       public void run() { 
        try { 
         new Mouse(); 
        } catch (MalformedURLException ex) { 
         ex.printStackTrace(); 
        } 
       } 

      }); 
     } catch (InvocationTargetException e) { 
      e.printStackTrace(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 

    public Mouse() throws MalformedURLException { 
     JFrame frame = new JFrame(); 
     JLabel label = new JLabel(new ImageIcon(
       new URL("https://i.stack.imgur.com/HXCUV.gif"))); 

     frame.setSize(500, 500); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 

     frame.add(label); 
    } 
} 
+1

मैंने एक संपादन के रूप में एक [mcve] जोड़ा। क्या आप एमसीवीई में एक ही व्यवहार देखते हैं? –

+0

हाँ इससे कोई फर्क नहीं पड़ता है। – Yakuhzi

+0

हू .. यह ठीक काम करता है। जेआरई के जावा संस्करण/माइक्रो-संस्करण को डंप करने के लिए उदाहरण में कुछ कोड डालें। –

उत्तर

1

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