当我试图裁剪图片时,Java小程序崩溃

当我试图裁剪图片时,Java小程序崩溃,java,applet,Java,Applet,我一直在尝试把一张更大的图片切碎,并将其用作游戏的瓷砖。我让程序使用fillRect()来模拟图像。但是,当我替换fillRect代码时,它崩溃了。以下是我一直在使用的: buffer.drawImage(section[i][j].getSectionImage(i, j), sectionSize * i + OFFSETx, sectionSize * j + OFFSETy, this); public class Section{ private static Im

我一直在尝试把一张更大的图片切碎,并将其用作游戏的瓷砖。我让程序使用fillRect()来模拟图像。但是,当我替换fillRect代码时,它崩溃了。以下是我一直在使用的:

buffer.drawImage(section[i][j].getSectionImage(i, j),
  sectionSize * i + OFFSETx,
  sectionSize * j + OFFSETy,
  this);

public class Section{
   private static ImageIcon ii;
   private static Image mainImage;
   private Image sectionImage;

   public Section(){
      if (ii == null){
         ii = new ImageIcon(this.getClass().getResource("images/Mossy_rocks.png"));
         mainImage = ii.getImage();
      }
   }
   public Image getSectionImage(int x, int y){
      sectionImage = createImage(new FilteredImageSource(mainImage.getSource(), 
         new CropImageFilter(1,1,20,20))); //test values
         return sectionImage;
   }
}
我尝试了对Section类使用“extends-JApplet/JFrame/JComponent”,但似乎没有任何帮助


编辑:我还想提一下,如果我只是从getSectionImage()返回mainImage,我会得到图像。我认为最大的问题是该函数的其余部分。。。但是我不确定,所以我包括了替换fillRect()时需要添加的所有内容。

我找到了一种更好的方法来裁剪此图像。我是这样做的:

screenImage.drawImage(Image sprite,
                 int (x position on screen),
                 int (y position on screen),
                 int (x position on screen + width),
                 int (y position on screen + height),
                 int (x position from sprite),
                 int (y position from sprite),
                 int (x position from sprite + width),
                 int (y position from sprite + height),
                 null);

控制台有什么异常吗?它在哪一行崩溃?变量中的值是什么?对不起。我想我用错了术语。它只是挂着。没有错误。什么都没有。当我重新创建错误时,我注意到一些事情:只有在扩展Section类的情况下才能使用createImage()。这就是问题所在。若我用JApplet或JFrame扩展该节,并注释掉所有其他相关代码,它将停止工作。更糟糕的是,清理项目还不够。一旦它停止工作,我就无法更改代码并重试。。。我必须重新启动,然后再试一次。我没有答案,只是说这里有零检查,看看是否可以找到映像,或者是否有任何变量为空,最重要的是,这发生在构造函数内部!不好的。我会将这段代码移到另一个方法中,至少在尝试调用mainImage之前检查是否找到了映像。getSource()检查getResource()的结果,`if(null!=getClass().getResource(“images/…)){//found image}。最后,您应该记录重要事件,例如,是否找到映像,即使是System.out也比不登录好谢谢你的建议eon。我已经检查过是否可以找到该图像,但将其写入代码将是一个好主意。如果我只是返回mainImage,而不是使用sectionImage=createImage(blah),那么我就得到了一个正常工作的产品。当然,这是完整的雪碧表,而不仅仅是我想要的20x20部分。当然,正如我所说,扩展类本身似乎是个问题(如果我没有使用createImage(),我就不需要扩展类)。