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


一、前言

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

二、问题描述

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

在这里插入图片描述

三、原因分析

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

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

  • 在定义完GameJFrameLoginJFrameRegisterJFrame方法后,如果要调用该方法内的成员变量,要使用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.内存原理

内存原理


七、结语

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

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alita11101_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值