2

您好我正在尝试在构造函数之前初始化 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初始化代码放在 atry-catch中,但它显示错误。 这可能吗 ?

4

4 回答 4

6

您可以使用初始化程序块。

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

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

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

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

于 2013-08-14T13:17:56.337 回答
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)
        {
        }
于 2013-08-14T13:19:26.187 回答
0

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

try{
    bg = ImageIO.read(new File((imageFiles.get(3)).toString()));
} catch (IOException e) {
    System.err.println("Could not load image file!");
}
于 2013-08-14T13:16:08.717 回答
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

于 2013-08-14T13:31:12.643 回答