无法解析在 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();
}
我刚开始使用 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();
}