对不起这个基本问题,但我在这里失去了理智......
这是我的代码:
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);
}
}
}
我用来将多个图像绘制到applet的方法导致了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.
}
}
UPDATE
我已经调试了我的文件,它返回我的img[]
为空,因为我使用了一个按钮来调用JFileChooser,然后调用我的loadimg()
方法。因此,在我选择一个文件之前它会返回一个NullPointerException错误,但是当我选择了一个文件时,它仍然会返回一个NullPointerException ..我该怎么办?
谢谢:)
更新已关闭 对不起我的noob错误,我忘了在开头声明数组大小:p
答案 0 :(得分:1)
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的数组
答案 1 :(得分:0)
如果参数g正确传递,并且索引i
未超出范围,则应调试。
答案 2 :(得分:0)
您必须初始化BufferedImage
数组!
所以不要这样:
private BufferedImage img[];
试试这个(如果你只有这11张图片):
private BufferedImage img[] = new BufferedImage[11];
这应解决NullPointerException
问题。