Gdy przenosimy mysz do gier wewnątrz javax.swing.JFrame
, wszystkie animowane GIF (javax.swing.ImageIcon
w środku javax.swing.JLabel
) przestają się animować, dopóki mysz nie przestanie się poruszać.GIF zatrzymuje animację, gdy mysz do gier się porusza.
Ten tylko dzieje się z myszy do gier z kierowcą na MacOS (testowałem go z Rocket-Kone xtd i myszy dla graczy Razer na dwóch komputerach). Kiedy używam innych myszy, wszystko działa dobrze.
Myszy do gier powodują również, że javax.swing.Timer
s przestaje wywoływać ich metody actionPerformed()
. I opened a thread here dla tego problemu, ale można to rozwiązać, używając zamiast tego java.util.TimerTask
. (Edit: Właściwie TimerTask również nie naprawić, ponieważ JFrame nie przemalować aż myszka przestanie się poruszać.)
Ale nie znalazłem alternatywę dla animacji GIF. Jestem bardziej zainteresowany rozwiązaniem problemu, zamiast korzystać z alternatyw, choć byłbym wdzięczny za działającą alternatywę.
Kod:
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);
}
}
Uruchamianie aplikacji:
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);
}
}
Dodałem [mcve] jako edycję. Czy widzisz to samo zachowanie w MCVE? –
Tak, to nie ma znaczenia. – Yakuhzi
Huh .. to działa dobrze tutaj. Wstaw trochę kodu do przykładu, aby zrzucić wersję Java/mikro-wersję JRE. –