有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java,try块在操作来自try作用域上方作用域的变量时产生错误

我在try块外声明了一个buffereImage,并在其中初始化它。但这似乎不起作用,因为编译器认为局部变量i在try块中不可访问,它显示了以下错误行8

    The local variable i may not have been initialized
   

我想知道为什么会发生这种情况,是否有办法避免这种情况

我可能已经在try块中包含了catch块下的所有代码,但我想知道在这里显示的情况下如何处理作用域, 这是密码

    public static void main(String[] args) throws IOException{
    BufferedImage i;
    try {
        i=ImageIO.read(new File("forest.jpg"));
    } catch (IOException e) {
        e.printStackTrace();
    }
    panel p=new DrawImage().new panel(i);
    JFrame f = new JFrame();
    
    f.setSize(500,500);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setLocationRelativeTo(null);
    f.add(p);
    f.setVisible(true);
    
}

顺便说一下,我在this link中尝试过这个解决方案,但它对我不起作用


共 (1) 个答案

  1. # 1 楼答案

    您尚未初始化变量i,因此出现此错误

    替换

    BufferedImage i;
    

    BufferedImage i = null;// Or any other value as per your business requirement
    

    为什么需要进行此初始化

    编译器不知道ImageIO.read(new File("forest.jpg"))将返回什么值,因此您必须为i赋值ImageIO.read(new File("forest.jpg"))i分配一些初始值