2017-04-06 77 views
0

让我困惑的主要问题是,我只是运行它运行的程序和第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); 

    } 
} 
+1

如果您向我们展示第136行,将会更好。 – Jiahao

+1

错误是什么? –

+0

您能否向我们提供您指定的错误和行? –

回答

2

这是一个简单的错字:

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

+0

该死,我感到非常感谢帮助,第3轮的问题现在已经解决,但为什么菜单栏不显示? – DummyTarget

+0

我对'JFrame'不熟悉,但是我认为你应该在菜单项添加到'file'之后,而不是之前,'setJMenuBar(菜单栏);'菜单栏之后''menubar.add(文件);' 。新增(文件);'?请参阅[本示例呼叫顺序](http://stackoverflow.com/a/29062045/1270789)。 –

+0

感谢您的帮助兄弟,我真的很糟糕的调试,我是初学者在Java,我不是自信,问题是与文件=新JMenu();因为在菜单栏上应该出现名为“File”的东西,所以我没有设置名称 它应该是file = new JMenu(“File”);非常感谢您的帮助! – DummyTarget