Phoenizz Ответов: 1

Проблема с тем, что цикл for не находит мои изображения


Это те ошибки, которые я получил. Я провел исследование этих исключений и обнаружил, что это происходит из-за того, что массив не заполняется = null.

<pre>Exception in thread "main" java.lang.NullPointerException
at java.desktop/javax.swing.ImageIcon.<init>(ImageIcon.java:217)
at LogoAnimatorJPanel.<init>(LogoAnimatorJPanel.java:27)
at LogoAnimator.main(LogoAnimator.java:11)


При запуске кода это строка ниже, которая выделяет, я попытался изменить каталог изображений, но пока безуспешно.

for ( int count = 0; count < images.length; count++ )
   images[ count ] = new ImageIcon( getClass().getResource("C:/Users/migue/Documents/Jgrasp/JavaPart1/" + IMAGE_NAME + count + ".jpg") );


Первая часть моей JPanel. JavaPart1-это каталог для моих изображений.

public class LogoAnimatorJPanel extends JPanel
 {
 private final static String IMAGE_NAME = "Car1.jpg"; // base image name
 protected ImageIcon images[]; 
 private final int TOTAL_IMAGES = 18; // number of images
 private int currentImage = 0; // current image index
 private final int ANIMATION_DELAY = 50; // millisecond delay
 private int width; // image width
 private int height; // image height
 private Timer animationTimer; // Timer drives animation

 // constructor initializes LogoAnimatorJPanel by loading images
 public LogoAnimatorJPanel()
 {
 images = new ImageIcon[ TOTAL_IMAGES ];

 // load images
 for ( int count = 0; count < images.length; count++ )
   images[ count ] = new ImageIcon( getClass().getResource("C:/Users/migue/Documents/Jgrasp/JavaPart1/" + IMAGE_NAME + count + ".jpg") );
 public void startAnimation()
 {
 if ( animationTimer == null )
 {
 currentImage = 0; // display first image

// create timer
   animationTimer =
   new Timer( ANIMATION_DELAY, new TimerHandler() );
   
   animationTimer.start(); // start Timer


 } // end if
 else // animationTimer already exists, restart animation
 {
 if (!animationTimer.isRunning())
   animationTimer.restart(); 

 } // end else
 } // end method startAnimation


Главное здесь.

public class LogoAnimator
 {
 // execute animation in a JFrame
 public static void main( String args[] )
 {

 LogoAnimatorJPanel animation = new LogoAnimatorJPanel();

 JFrame window = new JFrame( "Animator test" ); // set up window
 window.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
 window.add( animation ); // add panel to frame


 window.setVisible( true ); // display window

 animation.startAnimation();


Я считаю, что решение может быть простым, но я застрял на весь день и решил обратиться за помощью.

Что я уже пробовал:

Я попытался изменить цикл for и каталог изображений.

1 Ответов

Рейтинг:
1

MadMyche

Ну, в основном ваши исследования верны. Проблема, с которой, по-видимому, сталкивается ваша программа, заключается в том, что new ImageIcon() метод не может функционировать с тем, что ему передается. Наиболее вероятная причина заключается в том, что предоставляемый путь изображения не найден.

Лучший способ узнать это-через Отладка, просто пройдите через рутину и посмотрите, для чего она нужна count когда возникает ошибка.
Возможно, вы даже захотите назначить путь локальной строковой переменной в этом цикле и убедиться, что весь путь является допустимым.

Ссылка: Топ-10 Советов По Отладке Java[^]