【问题标题】:Can't resolve an object initiated in a public method?无法解析在公共方法中启动的对象?
【发布时间】:2018-04-07 23:19:04
【问题描述】:

我刚开始使用 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);
    }
}

我的 main 方法中出现错误,提示“mainWindow”无法解析。为什么是这样?是因为我在其他方法中创建了 mainWindow 对象吗?有没有办法在不将 makeWindow() 方法中的所有内容都放入 main 方法的情况下解决此问题?

【问题讨论】:

  • mainWindow 是方法 makeWindow() 的本地窗口。一切都与范围有关。
  • 这是范围的外部指南:geeksforgeeks.org/variable-scope-in-java
  • 我注意到 mainWindow 是本地的,但 mainWindow 是一个对象,我怎样才能创建一个实例对象?我已经知道我可以在它们各自的方法之外声明实例变量,但是我怎样才能对一个对象做同样的事情呢?

标签: java object methods public resolve


【解决方案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 所评论(分享的学分),您可以从您的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);
    }
}

【讨论】:

  • 非常感谢!为我澄清了!
  • 另外,您可以从 makeWindow() 方法中返回 mainWindow 并将其分配给 main 方法中的变量
  • 哦,是的,我没想到。谢谢!
【解决方案2】:

全局创建 mainWindow 实例/引用

private static JFrame mainWindow;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2014-01-03
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    相关资源
    最近更新 更多