如何在构造函数之前初始化BufferedImage?

时间:2013-08-14 13:11:33

标签: java swing

您好我正在尝试在构造函数之前初始化BufferedImage实例。 有可能??

我不知道&哪里? 我也不想在方法等中初始化它。

当我尝试在构造函数之前初始化它时,它会向我显示错误。

我的代码:

public static class ImagePane extends JPanel
 {
        private BufferedImage bg;
        java.util.List<Path> imageFiles= getFilesFromDirectory(FileSystems.getDefault().getPath("D:\\New folder")); 

        bg = ImageIO.read(new File((imageFiles.get(3)).toString()));

        public ImagePane() 
        {
        }

        public void nextImage(int cnt)
        {
        }
 }

我还尝试将bg初始化代码放在try-catch中,但它显示错误。 这可能吗?

4 个答案:

答案 0 :(得分:6)

您可以使用initializer阻止。

  

通常,您可以使用代码初始化a中的实例变量   构造函数。使用构造函数有两种选择   初始化实例变量:初始化块和最终方法。

     

实例变量的初始化块看起来就像静态   初始化块,但没有static关键字:

{
        bg = ImageIO.read(new File((imageFiles.get(3)).toString()));
}

Java编译器将初始化程序块复制到每个构造函数中。因此,这种方法可用于在多个构造函数之间共享代码块。

答案 1 :(得分:3)

您可以使用 initializer来实现此目的。

初始化程序块用于初始化实例数据成员。每次创建类的对象时它都会运行。

public class ImagePane extends JPanel
 {

     private BufferedImage bg;
     private java.util.List<Path> imageFiles;

      {
            imageFiles= getFilesFromDirectory(FileSystems.getDefault().getPath("D:\\New folder")); 

            bg = ImageIO.read(new File((imageFiles.get(3)).toString()));
       }

        public ImagePane() 
        {
        }

        public void nextImage(int cnt)
        {
        }

答案 2 :(得分:0)

以这种方式加载图像需要使用try / catch块;尝试在初始化中使用它。

try{
    bg = ImageIO.read(new File((imageFiles.get(3)).toString()));
} catch (IOException e) {
    System.err.println("Could not load image file!");
}

答案 3 :(得分:0)

你知道,我在制作游戏时遇到了这个问题。我最终创建了一个静态的“ImageManager”类,它可以在加载时发现所有图像。为了获得图像,我只是调用静态getImage()方法。

ImageManager:https://github.com/zalpha314/The-Wheel-of-Time/blob/master/src/engine/content/ImageManager.java

然后我可以使用这个来获取图像: https://github.com/zalpha314/The-Wheel-of-Time/blob/master/src/engine/models/Piece.java#L14