Хорошо, поэтому я как-то решил проблему: во-первых, я изменил util.Timer на swing.Timer, который сам по себе не помог.Раньше я сохранял каждое изображение после того, как оно было нарисовано на моем рабочем столе, а затем я загружал его на экран, когда оно должно отображаться.Я немного поигрался с кодом и обнаружил, что мне не нужно его сохранять, но я могу ссылаться на него напрямую, сделав его static
.Когда я это сделал, проблема исчезла.Вот пример кода того, что я имею в виду:
До:
// In the drawing class
save = new File(aster.filePath + aster.fileName + ".png");
image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
try {
ImageIO.write(image, "png", save);
} catch (IOException i) {
System.out.println("Writing has encountered an error: \n" + i); }
// In the displaying class
load = new File(aster.filePath + aster.fileName + ".png");
image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
try {
image = ImageIO.read(load);
} catch (IOException i) {
System.out.println("Reading has encountered an error: \n" + i); }
ImageIcon icon = new ImageIcon(image);
displayingJLabel.setIcon(icon);
frame.add(displayingJLabel);
После:
// One static declaration and initialization of an BufferedImage in the drawing class
public static BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
// Drawing Code
// Accessing the image
ImageIcon icon = new ImageIcon(DrawingClass.image);
displayingJLabel.setIcon(icon);
frame.add(displayingJLabel);
По сути, все то же самое, за исключением того, что все сохранение и чтениепроцесс был пропущен, и вместо нескольких локальных BufferedImage
я использую только один static BufferedImage
.
Я не знаю точно, почему это сработало, но я предполагаю, что весь процесс чтения и записипросто потребовалось слишком много времени, чтобы таймер срабатывал каждую секунду, и этот новый метод намного быстрее.Я еще не пытался сделать все это с помощью util.Timer, но я думаю, что колебание. Вероятно, Timer имеет свою долю в решении этой проблемы.