Пока я перемещаю свою игровую мышь внутри javax.swing.JFrame
, все анимированные GIF-файлы (внутри javax.swing.JLabel
) останавливают анимацию, пока мышь не перестанет двигаться.GIF останавливает анимацию при перемещении игровой мыши
Это только происходит с игровой мыши с водителем на Macos (тестировал с Ракетно-Kone XTD и игровой мыши Razer на двух компьютерах). Когда я использую других мышей, все работает нормально.
Игровые мыши также вызывают javax.swing.Timer
s, чтобы прекратить называть их методы actionPerformed()
. I opened a thread here для этой проблемы, но это можно решить, используя вместо этого java.util.TimerTask
. (Редактировать: На самом деле TimerTask также не исправляет это, потому что JFrame не перерисовывает, пока мышь не перестает перемещаться.)
Но я не нашел альтернативы для анимации GIF. Меня больше интересует решение проблемы вместо использования альтернатив, хотя я был бы благодарен за рабочую альтернативу.
Код:
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);
}
}
Запуска приложение:
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);
}
}
Я добавил [mcve] в качестве редактирования. Вы видите такое же поведение в MCVE? –
Да, это не имеет значения. – Yakuhzi
Huh .. он отлично работает здесь. Поместите некоторый код в примере, чтобы сбрасывать версию Java/версию для JRE. –