当前位置:   article > 正文

运行主程序后无法显示图形化界面的原因及其解决方法(拼图小游戏)_java写的小游戏里的页面加载不出来了

java写的小游戏里的页面加载不出来了


一、前言

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

二、问题描述

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

在这里插入图片描述

三、原因分析

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

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.内存原理

内存原理


七、结语

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码优化者/article/detail/61480
推荐阅读
相关标签
  

闽ICP备14008679号