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



    一、前言

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

    二、问题描述

    在创建了一个类用于主程序的入口后,运行是不报错的,但是没有显示图形化界面
    但是如果在一个测试类中写程序就会弹出窗口(下图二)
    在这里插入图片描述

    在这里插入图片描述

    三、原因分析

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

    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);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

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

    import javax.swing.*;
    
    public class GameJFrame extends JFrame{
        public void GameJFrame(){
            JFrame gameJFrame = new JFrame();
            gameJFrame.setSize(603,680);
            gameJFrame.setVisible(true);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    import javax.swing.*;
    
    public class LoginJFrame extends JFrame {
        public void loginJFrame(){
            JFrame loginJFrame = new JFrame();
            loginJFrame.setSize(488,430);
            loginJFrame.setVisible(true);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    import javax.swing.*;
    
    public class RegisterJFrame extends JFrame {
        public void registerJFrame(){
            JFrame registerJFrame = new JFrame();
            registerJFrame.setSize(488,500);
            registerJFrame.setVisible(true);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 在定义完GameJFrameLoginJFrameRegisterJFrame方法后,如果要调用该方法内的成员变量,要使用this关键字,而不是像在测试类中新建对象后直接调用新的对象,这样的话由于我们调用的方法是不含参数的,如果new了一个对象会被放到堆内存中,数据也在堆内存中,所以无法访问到
    • 构造方法不能带有void,因为程序主入口已经定义过了

    四、解决方案

    1. 不要新建对象
    2. 使用this关键字调用参数
    3. 定义方法格式改为:
    public GameJFrame(){
    	//方法体
    }
    
    • 1
    • 2
    • 3
    public LoginJFrame(){
    	//方法体
    }
    
    • 1
    • 2
    • 3
    public RegisterJFrame(){
    	//方法体
    }
    
    • 1
    • 2
    • 3

    五、正确代码演示

    import javax.swing.*;
    
    public class GameJFrame extends JFrame {
    
        public  GameJFrame(){
            this.setSize(603,680);
            this.setVisible(true);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    import javax.swing.*;
    
    public class LoginJFrame extends JFrame {
    
        public LoginJFrame(){
    
            this.setSize(488,430);
            this.setVisible(true);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    import javax.swing.*;
    
    public class RegisterJFrame extends JFrame {
        public  RegisterJFrame(){
    
            this.setSize(488,500);
            this.setVisible(true);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    六、涉及知识点

    1.构造方法和this关键字

    构造方法和this关键字

    2.内存原理

    内存原理


    七、结语

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

  • 相关阅读:
    macOS中安装zsh,并配置些重要插件
    洛谷千题详解 | P1003 [NOIP2011 提高组] 铺地毯【C++、 Java、Python语言】
    C# 第五章『面向对象』◆第8节:接口
    [L437] 前缀和
    SpringMVC-1-Hello SpringMVC
    Linux - 进程状态 - Linux 当中的进程状态是如何维护的?
    Python CNN卷积神经网络实例讲解,CNN实战,CNN代码实例,超实用
    Open3D(C++) 网格变形
    野火霸天虎 STM32F407 学习笔记_4 构建库函数尝试;使用固件库点亮 LED 灯
    视频教程 | Demo演示视频上线,几分钟了解一个长安链使用技巧
  • 原文地址:https://blog.csdn.net/Alita233_/article/details/126773928