GUI界面 111111111

请问出现下面情况怎么处理?仅仅是一个GUI界面,没有插入任何图片,点击按钮时就会出现下面报错

img

你代码发出来看看呢? 这还得看代码评估一下

img

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/1087365
  • 这篇博客也不错, 你可以看下编写GUI程序,完成登录界面的设计(使用绝对布局,图片自选)。
  • 除此之外, 这篇博客: GUI贪吃蛇中的 在游戏面板设置定时器,让蛇身动起来 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    设置一个timer,然后设置刷新频率

     Timer timer=new Timer(100,this);
    

    构造器中添加timer的开始

            timer.start();//游戏一开始定时器就启动
    

    重写事件监听

      //事件监听,需要通过特定的时间监听
        @Override
        public void actionPerformed(ActionEvent e) {
            if (isStart){               //如果是开始状态就让小蛇动起来
                for (int i = length-1; i >0; i--) {
                    snakeX[i]=snakeX[i-1];//后一节移向前一节
                    snakeY[i]=snakeY[i-1];
                }
                //身体走向
                if (fx.equals("R")){
                    snakeX[0]=snakeX[0]+25;        //////////////这里有一点不理解////////////////////////////
                    if (snakeX[0]>1000){snakeX[0]=25;}  //边界判断
                }
                else if (fx.equals("L")){
                    snakeX[0]=snakeX[0]-25;
                    if (snakeX[0]<25){snakeX[0]=1000;}  //边界判断
                }
                else if (fx.equals("U")){
                    snakeY[0]=snakeY[0]-25;
                    if (snakeY[0]<25){snakeY[0]=800;}  //边界判断
                }
                else if (fx.equals("D")){
                    snakeY[0]=snakeY[0]+25;
                    if (snakeY[0]>800){snakeY[0]=25;}  //边界判断
                }
                repaint();
            }
            timer.start();
        }
    

    游戏面板总的代码:

    package snake;
    
    import javax.swing.*;
    import javax.swing.plaf.PanelUI;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    
    //游戏的面板
    /*实现键盘监听要继承KeyListener接口,实现定时器要用ActionListener接口
    *
    * */
    public class GamePanel extends JPanel implements KeyListener, ActionListener {//直接在这里继承借口就可以在内部类里面实现键盘监听
        //定义蛇的数据结构
        int length;//蛇的长度
        int[] snakeX=new int[600];//蛇的坐标25*25
        int[] snakeY=new int[500];//蛇的坐标25*25
        String fx;//初始方向向右
        //游戏开始的状态、停止的状态
        boolean isStart=false;//游戏默认是不开始
        //定时器,以毫秒为单位,1000ms=1s
        Timer timer=new Timer(100,this);//以毫秒为单位,100毫秒一次
    
    
        //初始化方法
        public void init(){
            length=3;
          snakeX[0]=100;snakeY[0]=100;//脑袋的坐标
           snakeX[1]=75;snakeY[1]=100;//第一个身体的坐标
            snakeX[2]=50;snakeY[2]=100;//第二个身体的坐标
            fx="R";//初始方向向右
        }
        
        //构造器
        public GamePanel(){
            init();
            //获得焦点和键盘事件
            this.setFocusable(true);//获得焦点事件
            this.addKeyListener(this);
            timer.start();//游戏一开始定时器就启动
        }
    
    
        //游戏中的所有画面都使用绘制面板进行制作
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            //初始静态的面板
            this.setBackground(Color.WHITE);
            //Date.header.paintIcon(this,g,10,15);//当前这个画笔,g这个监听事件,25,11的位置,当前第一张的背景
            //g.fillRect(25,75,1000,800 );//头部的画板的位置、大小
            //开始的时候蛇头的位置
            if (fx.equals("R")){
                Date.right.paintIcon(this,g,snakeX[0],snakeY[0]);//蛇头初始化向右
            }else  if (fx.equals("U")){
                Date.up.paintIcon(this,g,snakeX[0],snakeY[0]);//蛇头初始化向右
            }else  if (fx.equals("D")){
                Date.down.paintIcon(this,g,snakeX[0],snakeY[0]);//蛇头初始化向右
            }else  if (fx.equals("L")){
                Date.left.paintIcon(this,g,snakeX[0],snakeY[0]);//蛇头初始化向右
            }
         //游戏刚开始的时候调用的Date数据画出的蛇身
            for (int i = 1; i < length; i++) {
                Date.body.paintIcon(this,g,snakeX[i],snakeY[i]);
            }
    
    
            //请你开始游戏吧~文字监听,写上
            if (isStart==false){ //这里是判断,所以一定要写成“==”才可以,刚刚就是没注意到,找了半天bug,快崩了~
                g.setColor(Color.black);//颜色的大小写偶可以
                g.setFont(new Font("微软雅黑",Font.BOLD,40));//设置出来的字体
                g.drawString("请你开始游戏吧",350,400);//监听事件监听出来的文字字符串
            }
        }
        //键盘监听事件
        @Override
        public void keyTyped(KeyEvent e) {
    
        }
    
    
        //我们用的键盘监听是这个
        @Override
        public void keyPressed(KeyEvent e) {
            int keyCode = e.getKeyCode();//获得键盘按钮监听
            if(keyCode==KeyEvent.VK_SPACE){//如果按下的是空格键
                 isStart=!isStart;
                 repaint();
            }
            if (keyCode==KeyEvent.VK_UP){
                    fx="U";
            }else if (keyCode==KeyEvent.VK_DOWN){
                fx="D";
            }else if (keyCode==KeyEvent.VK_LEFT){
                fx="L";
            }else if (keyCode==KeyEvent.VK_RIGHT){
                fx="R";
            }
    
        }
    
    
    
        @Override
        public void keyReleased(KeyEvent e) {
    
        }
        //事件监听,需要通过特定的时间监听
        @Override
        public void actionPerformed(ActionEvent e) {
            if (isStart){               //如果是开始状态就让小蛇动起来
                for (int i = length-1; i >0; i--) {
                    snakeX[i]=snakeX[i-1];//后一节移向前一节
                    snakeY[i]=snakeY[i-1];
                }
                //身体走向
                if (fx.equals("R")){
                    snakeX[0]=snakeX[0]+25;        //////////////这里有一点不理解////////////////////////////
                    if (snakeX[0]>1000){snakeX[0]=25;}  //边界判断
                }
                else if (fx.equals("L")){
                    snakeX[0]=snakeX[0]-25;
                    if (snakeX[0]<25){snakeX[0]=1000;}  //边界判断
                }
                else if (fx.equals("U")){
                    snakeY[0]=snakeY[0]-25;
                    if (snakeY[0]<25){snakeY[0]=800;}  //边界判断
                }
                else if (fx.equals("D")){
                    snakeY[0]=snakeY[0]+25;
                    if (snakeY[0]>=800){snakeY[0]=25;}  //边界判断
                }
                repaint();
            }
            timer.start();
        }
    }
    
    //键盘监听器
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

你包含了什么库?为什么会有 libpng 这个库?重新创建一个新的项目呢