java - 简单的 Java 游戏崩溃

标签 java eclipse

让我困惑的主要问题是,我只是运行它运行的程序,然后卡在第 3 轮上,我的意思是它根本不起作用,并在第 136 行显示错误,但我不知道没有编译错误,但当你到达第 3 轮时,尝试单击出现错误的任何按钮,并且由于某种原因菜单栏没有出现,这是代码

package com.tutorial.main;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Window extends JFrame{
private int round=1;
private int firstRand,rand2,rand3,rand4;
private JLabel winOrLose,or,firstLabel,secondLabel,thirdLabel,fourthLabel;
private JButton higher,lower;
private JMenuBar menubar;
private JMenu file;
private JMenuItem reset,exit;


public  Window(){
    firstRand=(int)(Math.random()*20+1);
    Font font=new Font("Serif",Font.BOLD,16);
    setLayout(new GridLayout(3,1));

    menubar=new JMenuBar();
    setJMenuBar(menubar);

    file=new JMenu();
    menubar.add(file);

    reset=new JMenuItem("Restart");
    file.add(reset);

    exit=new JMenuItem("Quit");
    file.add(exit);

    systemClose s=new systemClose();
    exit.addActionListener(s);

    restartGame r=new restartGame();
    reset.addActionListener(r);

    Container pane=this.getContentPane();

    // top panel setup

    JPanel top=new JPanel();
    top.setLayout(new GridLayout(1,4));

    firstLabel=new JLabel(""+firstRand,SwingConstants.CENTER);
    firstLabel.setFont(font);
    top.add(firstLabel);

    secondLabel=new JLabel("",SwingConstants.CENTER);
    secondLabel.setFont(font);
    top.add(secondLabel);

    thirdLabel=new JLabel("",SwingConstants.CENTER);
    thirdLabel.setFont(font);
    top.add(thirdLabel);

    secondLabel=new JLabel("",SwingConstants.CENTER);
    secondLabel.setFont(font);
    top.add(secondLabel);
    pane.add(top);

    // middle panel stup

    JPanel middle=new JPanel();
    middle.setLayout(new GridLayout(1,3));

    higher=new JButton("HIGHER");
    middle.add(higher);

    or=new JLabel("OR",SwingConstants.CENTER);
    middle.add(or);

    lower=new JButton("LOWER");
    middle.add(lower);
    pane.add(middle);

    event e=new event();

    higher.addActionListener(e);
    lower.addActionListener(e);

    // Simplest one...bottom panel

    JPanel bottom=new JPanel();
    bottom.setLayout(new GridLayout(1,1));

    winOrLose=new JLabel("",SwingConstants.CENTER);
    winOrLose.setFont(font);
    bottom.add(winOrLose);
    pane.add(bottom);
    }
     public class event implements ActionListener{
      public void actionPerformed(ActionEvent event){
        String option=event.getActionCommand();
        if(round==1){
            rand2=(int)(Math.random()*20+1);
            secondLabel.setText(""+rand2);
            if(rand2>firstRand && option.equals("HIGHER")){
                winOrLose.setText("Right,2 more!");
            }else if(rand2<firstRand && option.equals("HIGHER")){
                winOrLose.setText("You Lost!");
                lower.setEnabled(false);
                higher.setEnabled(false);
            }else if(rand2>firstRand && option.equals("LOWER")){
                winOrLose.setText("You Lost!");
                lower.setEnabled(false);
                higher.setEnabled(false);

            }else if(rand2<firstRand&& option.equals("LOWER")){
                winOrLose.setText("Right,2 more!");
            }

            // Start Round 2
            round=2;
        }else if(round==2){
            rand3=(int)(Math.random()*20+1);
            thirdLabel.setText(""+rand3);
            if(rand3>rand2 && option.equals("HIGHER")){
                winOrLose.setText("Right,1 more!");
            }else if(rand3<rand2 && option.equals("HIGHER")){
                winOrLose.setText("You Lost!");
                lower.setEnabled(false);
                higher.setEnabled(false);
            }else if(rand3>rand2 && option.equals("LOWER")){
                winOrLose.setText("You Lost!");
                lower.setEnabled(false);
                higher.setEnabled(false);

            }else if(rand3<rand2&& option.equals("LOWER")){
                winOrLose.setText("Right,1 more!");
            }
            // Start Round 3
            round=3;
        }else if(round==3){
            rand4=(int)(Math.random()*20+1);
            fourthLabel.setText(""+rand4);
            if(rand4>rand3 && option.equals("HIGHER")){
                winOrLose.setText("You Won The Game!");
            }else if(rand4<rand3 && option.equals("HIGHER")){
                winOrLose.setText("You Lost!");
                lower.setEnabled(false);
                higher.setEnabled(false);
            }else if(rand4>rand3 && option.equals("LOWER")){
                winOrLose.setText("You Lost!");
                lower.setEnabled(false);
                higher.setEnabled(false);

            }else if(rand4<rand3&& option.equals("LOWER")){
                winOrLose.setText("You Won The Game!");
            }
        }

    }
}
public class systemClose implements ActionListener{
    public void actionPerformed(ActionEvent event){
        System.exit(0);
    }
}
public class restartGame implements ActionListener{
    public void actionPerformed(ActionEvent event){
        firstRand=(int)(Math.random()*20+1);
        round=1;

        higher.setEnabled(true);
        lower.setEnabled(true);
        firstLabel.setText(""+firstRand);
        secondLabel.setText("");
        thirdLabel.setText("");
        fourthLabel.setText("");
        winOrLose.setText("");
    }
 }
}

我在其他文件(Game.java)中打开了窗口

package com.tutorial.main;
import java.awt.Canvas;
import javax.swing.JFrame;
import java.awt.*;
import javax.swing.*;
public class Game {
public static void main(String args[]){
    Window win=new Window();
    win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    win.setSize(300,150);
    win.setBackground(Color.BLACK);
    win.setVisible(true);
    win.setResizable(false);

   }
}

最佳答案

这是一个简单的拼写错误:

firstLabel=new JLabel(""+firstRand,SwingConstants.CENTER);
firstLabel.setFont(font);
top.add(firstLabel);

secondLabel=new JLabel("",SwingConstants.CENTER);
secondLabel.setFont(font);
top.add(secondLabel);

thirdLabel=new JLabel("",SwingConstants.CENTER);
thirdLabel.setFont(font);
top.add(thirdLabel);

secondLabel=new JLabel("",SwingConstants.CENTER); // OOPS
secondLabel.setFont(font);                        // OOPS
top.add(secondLabel);                             // OOPS

在第四组中,您应该使用fourthLabel!否则,它是未初始化的,因此您将得到您提到的 NullPointerException

关于java - 简单的 Java 游戏崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43245846/

相关文章:

java - 如何制作在所有窗口分辨率下显示相似行为(布局)的 SWT/JFace 对话框

Java Create KeyPair 在虚拟机上挂起,但在物理系统上工作

java HttpClient 403禁止问题?

java - 我已经在我的 linux 机器上安装了 jdk9,但是缺少 jre 文件,我是否下载了错误的 tar 文件?

java - 如何将单元格格式设置为文本

java - 代码大纲的 IntelliJ 快捷方式

eclipse - Git 在 Eclipse 中覆盖 .project 文件

eclipse - java.lang.UnsatisfiedLinkError : no Library in java. 库.path

android - onTouch 覆盖 - Eclipse 中的错误消息

android - 如何在 Eclipse/Phonegap/Android 项目中链接 assets/www 文件夹?