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