无法解析在公共方法中发起的对象?

时间:2017-10-26 14:10:57

标签: java object methods public resolve

我刚刚开始使用java,我正在开发一个新的GUI。我制作了一个方法来制作我的JFrame,设置其默认位置,关闭操作,背景颜色等。

为了整洁,我为此做了一个单独的方法,使其远离主代码。如果我把所有这些东西放在main方法中,我已经知道如何解决这个方法了。

这是代码:

public class Main {

    public static void makeWindow(){
        JFrame mainWindow = new JFrame();
        mainWindow.setVisible(true);
        mainWindow.setPreferredSize(new Dimension(400,400));
        mainWindow.pack();
        mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainWindow.setLocationRelativeTo(null);
    }

    public static void main(String args[]){
        makeWindow();
        JPanel mainPanel = new JPanel();
        mainWindow.add(mainPanel);
    }
}

我的主要方法中出现错误,说明" mainWindow"无法解决。为什么是这样?是因为我在另一个方法中创建了mainWindow对象?有没有办法解决这个问题,而不将makeWindow()方法中的所有内容都放到main方法中?

2 个答案:

答案 0 :(得分:1)

这不起作用,因为mainWindow仅存在于makeWindow方法的上下文中。你可以改为静态字段:

public class Main {

    private static JFrame mainWindow; // declare it here so it can be seen from your main method.

    public static void makeWindow(){
        mainWindow = new JFrame();
        mainWindow.setVisible(true);
        mainWindow.setPreferredSize(new Dimension(400,400));
        mainWindow.pack();
        mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainWindow.setLocationRelativeTo(null);
    }

    public static void main(String args[]){
        makeWindow();
        JPanel mainPanel = new JPanel();
        mainWindow.add(mainPanel);
    }
}

修改

在@Xing发表评论(共享信用)后,您可以从mainWindow方法返回makeWindow

public class Main {

    public static JFrame makeWindow(){
        JFrame mainWindow = new JFrame();
        mainWindow.setVisible(true);
        mainWindow.setPreferredSize(new Dimension(400,400));
        mainWindow.pack();
        mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainWindow.setLocationRelativeTo(null);
        return mainWindow;
    }

    public static void main(String args[]){
        JFrame mainWindow = makeWindow();
        JPanel mainPanel = new JPanel();
        mainWindow.add(mainPanel);
    }
}

答案 1 :(得分:0)

全局创建mainWindow实例/引用

private static JFrame mainWindow;

public static void makeWindow(){
    mainWindow = new JFrame();
}