运行主程序后无法显示图形化界面的原因及其解决方法(拼图小游戏)

简介: 在定义完GameJFrame、LoginJFrame和RegisterJFrame方法后,如果要调用该方法内的成员变量,要使用this关键字,而不是像在测试类中新建对象后直接调用新的对象,这样的话由于我们调用的方法是不含参数的,如果new了一个对象会被放到堆内存中,数据也在堆内存中,所以无法访问到

一、前言


这个问题是在做第一个小项目——拼图游戏的时候发现的,在做完整个项目以后会有一个系列来详细描述该项目,也会有另一个专栏来记录我在此过程中遇到的一些问题


二、问题描述


在创建了一个类用于主程序的入口后,运行是不报错的,但是没有显示图形化界面

但是如果在一个测试类中写程序就会弹出窗口(下图二)


773ee8e8dfac4673aa6b1ba602565884.png

389925484c7046ddbe36172445144730.png


三、原因分析


首先看了一下测试类的代码,没有问题,方法设计没问题


import javax.swing.*;
public class Test {
    public static void main(String[] args) {
        //创建游戏主界面
        JFrame gameJFrame = new JFrame();
        //设置长宽
        gameJFrame.setSize(603,680);
        //设置可视化
        gameJFrame.setVisible(true);
        //创建登录界面
        JFrame loginJFrame = new JFrame();
        loginJFrame.setSize(488,430);
        loginJFrame.setVisible(true);
        //创建注册界面
        JFrame registerJFrame = new JFrame();
        registerJFrame.setSize(488,500);
        registerJFrame.setVisible(true);
    }
}


再看了一下我定义的每个类的代码,发现问题应该是出在方法体内


import javax.swing.*;
public class GameJFrame extends JFrame{
    public void GameJFrame(){
        JFrame gameJFrame = new JFrame();
        gameJFrame.setSize(603,680);
        gameJFrame.setVisible(true);
    }
}
import javax.swing.*;
public class LoginJFrame extends JFrame {
    public void loginJFrame(){
        JFrame loginJFrame = new JFrame();
        loginJFrame.setSize(488,430);
        loginJFrame.setVisible(true);
    }
}
import javax.swing.*;
public class RegisterJFrame extends JFrame {
    public void registerJFrame(){
        JFrame registerJFrame = new JFrame();
        registerJFrame.setSize(488,500);
        registerJFrame.setVisible(true);
    }
}


  • 在定义完GameJFrame、LoginJFrame和RegisterJFrame方法后,如果要调用该方法内的成员变量,要使用this关键字,而不是像在测试类中新建对象后直接调用新的对象,这样的话由于我们调用的方法是不含参数的,如果new了一个对象会被放到堆内存中,数据也在堆内存中,所以无法访问到


  • 构造方法不能带有void,因为程序主入口已经定义过了


四、解决方案


1.不要新建对象

2.使用this关键字调用参数

3.定义方法格式改为:


public GameJFrame(){
  //方法体
}
public LoginJFrame(){
  //方法体
}
public RegisterJFrame(){
  //方法体
}


五、正确代码演示


import javax.swing.*;
public class GameJFrame extends JFrame {
    public  GameJFrame(){
        this.setSize(603,680);
        this.setVisible(true);
    }
}
import javax.swing.*;
public class LoginJFrame extends JFrame {
    public LoginJFrame(){
        this.setSize(488,430);
        this.setVisible(true);
    }
}
import javax.swing.*;
public class RegisterJFrame extends JFrame {
    public  RegisterJFrame(){
        this.setSize(488,500);
        this.setVisible(true);
    }
}


六、涉及知识点


1.构造方法和this关键字


【构造方法和this关键字】


2.内存原理


【内存原理】


七、结语


如果小伙伴碰到其它问题也可以留言评论,对于经典的问题我也会单独出一期博客的

相关文章
关于 qml程序在目标机上开发时运行出现不断闪屏现象的 解决方法
关于 qml程序在目标机上开发时运行出现不断闪屏现象的 解决方法
关于 qml程序在目标机上开发时运行出现不断闪屏现象的 解决方法
|
小程序 开发者 异构计算
小程序真机调试反应很慢卡顿,界面跳转之后,页面出现空白,无法点击等问题解决方案
小程序真机调试反应很慢卡顿,界面跳转之后,页面出现空白,无法点击等问题解决方案
1124 0
小程序真机调试反应很慢卡顿,界面跳转之后,页面出现空白,无法点击等问题解决方案
Pycharm主题切换(禁用)导致UI界面显示异常解决
问题记录 UI显示异常 安装多个主题时,当禁用某些主题,切换回one dark theme时,发现代码编辑窗口背景变成白色,菜单栏其他地方背景为黑色 问题原因 查看Settings>Editor>Color Scheme>General,发现方案被改为-Classic Light
|
5月前
|
定位技术 C++ Python
ArcMap软件卡在加载界面且闪退无法打开的多种解决办法
ArcMap软件卡在加载界面且闪退无法打开的多种解决办法
300 1
|
12月前
|
缓存 小程序 开发工具
解决微信开发工具的调试器加载错误,从任务栏打开工具可能导致该问题,请不要从任务栏启动工具。 和调试器控制台显示为空,刷新出不来的问题。
解决微信开发工具的调试器加载错误,从任务栏打开工具可能导致该问题,请不要从任务栏启动工具。 和调试器控制台显示为空,刷新出不来的问题。
436 0
w10升级至W11系统,黑屏但鼠标与桌面快捷方式能用,如何解决
w10升级至W11系统,黑屏但鼠标与桌面快捷方式能用,如何解决
|
Windows
PowerShell 美化(谁不想要一个好看的终端呢)
PowerShell 美化(谁不想要一个好看的终端呢)
137 0
|
数据可视化
搭建完菜单后运行不显示菜单的原因及其解决方法(拼图小游戏)
在搭建完菜单以后,程序不报错也能运行,但是运行结果就是一个框,就跟没有搭建过菜单一样,如下图所示,没有我们想象中的菜单栏,更别说有下拉菜单了,但是如果将搭建菜单的代码单独放到一个测试类中去测试一下的话,会显示出来菜单,也就是说我们搭建菜单的核心代码是没有问题的
150 0
搭建完菜单后运行不显示菜单的原因及其解决方法(拼图小游戏)
|
API Windows
win11右键菜单改回win10教程(亲测可用-全流程截图)
win11右键菜单改回win10教程(亲测可用-全流程截图)
1080 0
win11右键菜单改回win10教程(亲测可用-全流程截图)
WIN10右键菜单长时间转圈的解决办法之二
WIN10右键菜单长时间转圈的解决办法之二
120 0