无法解析在 public 方法中启动的对象?

Can't resolve an object initiated in a public method?

我刚开始使用 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 方法中?

那是行不通的,因为 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 评论的那样(共享积分),您可以 return 来自您的 makeWindow 方法的 mainWindow

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);
    }
}

全局创建 mainWindow 实例/引用

private static JFrame mainWindow;

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