Извините за такой простой вопрос, но я тут схожу с ума ..
Вот мой код :
public void paint(Graphics g) {
for(int i=0;i<11;i++){
for(int x=0;x<2100;x+=210){
for(int y=0;y<2100;y+=210){
g.drawImage(img[i], x, y,200,200, null);
}
// g.drawImage(img2, WIDTH, WIDTH, jc);
}
}
}
Этот метод, который я использовал для отрисовки нескольких изображений в апплет, вызвал исключение NullPointerException.
Кто-нибудь знает почему?
Заранее спасибо :)
Мое изображение :
public void loadimg(File fn){
try{
// File fn = jc.getSelectedFile();
for(int i=0;i<11;i++){
img[i] = ImageIO.read(fn).getSubimage(3881, 923, 673, 713);
repaint();
}
}
catch(Exception e){
e.printStackTrace();
}
}
Что-то не так с моим кодом? Это еще не конец, но дополнительное изображение должно разделять изображение отдельно .. спасибо
Извините за мой плохой английский.
Кстати, это мой полный код
package afisapplet;
import java.applet.Applet;
import java.awt.*;
import java.awt.image.*;
import java.io.*;
//import java.net.URL;
import javax.imageio.*;
import java.awt.event.*;
import javax.swing.JFileChooser;
import afisapplet.Afisapplet;
public class displayaplet extends Applet implements ActionListener {
JFileChooser jc = new JFileChooser();
private BufferedImage img[];
//private BufferedImage img2;
Button b = new Button("Scan");
Button c = new Button("View");
// Button d = new Button("Select Image");
static Afisapplet afap ;
public void init() {
b.addActionListener(this);
c.addActionListener(this);
add(b);
add(c);
}
public void paint(Graphics g) {
for(int i=0;i<11;i++){
for(int x=0;x<2100;x+=210){
for(int y=0;y<2100;y+=210){
g.drawImage(img[i], x, y,200,200, null);
}
// g.drawImage(img2, WIDTH, WIDTH, jc);
}
}
}
public void scan(){
try{
afap = new Afisapplet();
}
catch(Exception e){
e.printStackTrace();
}
}
public void loadimg(File fn){
try{
// File fn = jc.getSelectedFile();
for(int i=0;i<11;i++){
img[i] = ImageIO.read(fn).getSubimage(3881, 923, 673, 713);
repaint();
}
}
catch(Exception e){
e.printStackTrace();
}
}
@Override
public void actionPerformed(ActionEvent ae) {
Button source= (Button) ae.getSource();
if(source.getLabel() == "Scan"){
scan();
}
if(source.getLabel() == "View"){
int returnVal= jc.showOpenDialog(c);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File fn = jc.getSelectedFile();
loadimg(fn);
} else {
return;
}
}
//To change body of generated methods, choose Tools | Templates.
}
}
ОБНОВИТЬ Я отладил свой файл, он возвращает, что мой img[]
равен нулю, потому что я использовал кнопку для вызова JFileChooser, а затем вызвал свой метод loadimg()
. поэтому, прежде чем я выберу файл, он вернет ошибку NullPointerException, но когда я выбрал файл, он все равно вернет исключение NullPointerException .. что мне делать? Благодарность :)
ОБНОВЛЕНИЕ ЗАКРЫТО, извините за ошибки новичка, я забыл указать размер массива в начале: p
3 ответа
Вам необходимо инициализировать свой массив BufferedImage
!
Итак, вместо этого:
private BufferedImage img[];
Попробуйте это (если у вас есть только эти 11 изображений):
private BufferedImage img[] = new BufferedImage[11];
Это должно решить проблему NullPointerException
.
for(int i=0;i<11;i++){
img[i] = ImageIO.read(fn).getSubimage(3881, 923, 673, 713);
repaint();
}
Здесь вы заполняете массив изображений от 0 до 11
for(i=1;i<12;i++){
for(x=1;x<2100;x+=210){
for(y=1;y<2100;y+=210){
g.drawImage(img[i], x, y,200,200, null);
}
Вы просматриваете массив изображений от 0 до 12 здесь
Вам следует выполнить отладку, если ваш параметр g передан правильно, а также если ваш индекс i
не выходит за пределы допустимого диапазона.
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
img
?img[]
?