Мне нужно написать программу Java, которая бесконечно циклически перемещается между 10 различными изображениями с помощью PREV и NEXT JButton. Существует также выход JButton для выхода из программы. Изображение должно отображаться на центральном экране. Каждое изображение является .jpg и сохраняется в папке с именем «изображения». Имя файла для каждого изображения сохраняется в массиве. Изображения имеют имена файлов, связанные с их индексом #s в массиве (0-9). (Например, 0.jpg, 1.jpg и т. Д.) Мой код компилируется без ошибок, но ни один из моих JButtons не появляется на JFrame и изображение. Во время запуска приложения в командной строке возвращает это:Java Программа для цикла между 10 картинами
C:\Users\Mikey\Desktop>java test
0. images/0.jpg
Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at test.loadIcons(test.java:31)
at test.<init>(test.java:47)
at test.main(test.java:39)
Вот мой код:
import java.awt.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import java.net.URL;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import java.awt.event.*;
public class test extends JFrame implements ActionListener {
private ImageIcon icon;
ImageIcon[] Pictures = new ImageIcon[10]; //array for file names
int clicks = 0; //increment by button clicks
JLabel picHolder = null;
public void loadIcons() { //begin load icons
int i;
for (i = 0; i < 10; i++) { //begin for loop
String nm = String.format("images/%d.jpg",i);
System.out.printf("%d. %s\n",i,nm);
URL imageURL = getClass().getClassLoader().getResource(nm);
icon = new ImageIcon(imageURL);
Image o = icon.getImage();
System.out.printf("%s\n",o.toString());
Pictures[i] = icon;
} //end for loop
} //end load icons
public static void main(String[] n) {
test o = new test();
}
public test() {
setSize(800,500);
setVisible(true);
setLocationRelativeTo(null);
setTitle("Mikey's Slideshow");
loadIcons(); //loods file names into array
JButton prev = new JButton("PREV");
JButton next = new JButton("NEXT");
JButton quit = new JButton("QUIT");
JPanel p_middle = new JPanel();
picHolder = new JLabel((Icon)Pictures[0]);
p_middle.add(picHolder);
p_middle.setPreferredSize(new Dimension(400,200));
JPanel p_bottom = new JPanel();
JLabel l1 = new JLabel("Go Broncos!");
p_bottom.setLayout(new BorderLayout());
p_bottom.add(quit,BorderLayout.SOUTH);
p_bottom.add(l1,BorderLayout.NORTH);
p_bottom.add(prev,BorderLayout.LINE_START);
p_bottom.add(next,BorderLayout.LINE_END);
quit.addActionListener(this);
prev.addActionListener(this);
next.addActionListener(this);
add(p_middle,BorderLayout.CENTER);
add(p_bottom,BorderLayout.SOUTH);
add(l1,BorderLayout.NORTH);
}
public void updatePic(int e) { //begin update pic
System.out.printf("%s\n",Pictures[e]);
picHolder.setIcon((Icon)Pictures[e]);
} //end update pic
public void actionPerformed(ActionEvent e) {
String a = e.getActionCommand();
if (a.equals("QUIT")) {System.exit(0);} //system exits
if (a.equals("NEXT")) {clicks++; if (clicks>9) {clicks=0;} updatePic(clicks);} //next picture
if (a.equals("PREV")) {clicks--; if (clicks<0) {clicks=9;} updatePic(clicks);} //previous picture
}
} //end class
Спасибо заранее!
Вы знаете, как устанавливается ваш путь к классу? Выражение 'getClass(). GetClassLoader(). GetResource (nm)' возвращает значение null, что означает, что файлы изображений не найдены. Их, не находясь на вашем пути к классу, объяснят, как их не найти. –
Чтобы построить ответ Бена, вы хотите, чтобы файлы изображений фактически находились в пакете Java в вашем проекте, если вы хотите получить к нему доступ таким образом. Вместо чтения из определенного местоположения файла на компьютере вы ищете локальный проект. Это очень полезно, так как позволяет вам переносить все ваши зависимости с помощью кода. –
Извините, я немного новичок в Java. Я установил свой путь, но не мой путь к классу. Как изменить путь к классу? – MIKEY