简单的Java游戏崩溃
让我困惑的主要问题是,我只是运行它运行的程序和第3轮上的Stucks,我的意思是它根本不起作用,并显示第136行的错误,但是idk没有编译错误,但是当你到达第3轮和尝试点击任何错误出现的按钮,出于某种原因,菜单栏这里没有出现的代码简单的Java游戏崩溃
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
。
该死,我感到非常感谢帮助,第3轮的问题现在已经解决,但为什么菜单栏不显示? – DummyTarget
我对'JFrame'不熟悉,但是我认为你应该在菜单项添加到'file'之后,而不是之前,'setJMenuBar(菜单栏);'菜单栏之后''menubar.add(文件);' 。新增(文件);'?请参阅[本示例呼叫顺序](http://stackoverflow.com/a/29062045/1270789)。 –
感谢您的帮助兄弟,我真的很糟糕的调试,我是初学者在Java,我不是自信,问题是与文件=新JMenu();因为在菜单栏上应该出现名为“File”的东西,所以我没有设置名称 它应该是file = new JMenu(“File”);非常感谢您的帮助! – DummyTarget
如果您向我们展示第136行,将会更好。 – Jiahao
错误是什么? –
您能否向我们提供您指定的错误和行? –