我正在尝试制作游戏,并且在所述游戏中,有21根棍子,每个人轮流拿1-4支直到没有棍子,如果你不能再拿棍子你输了。我已成功在eclipse中创建了这个程序,但现在我想添加GUI,所以我必须更改代码。这段代码不完整,但每当我按下Go按钮时,它就会崩溃,这是我的actionListener。我会在文本字段中输入一个数字,然后按go,它就会崩溃。我该如何解决这个问题?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Sticks extends JFrame {
JButton Go;
JTextField tf1, tf2;
static JTextField sttf;
JLabel startTake;
static JLabel errorTake;
JLabel uTake;
JLabel compTake;
public Sticks() {
setLayout(new GridLayout(5, 2, 5, 5));
startTake = new JLabel("How many sticks do you want to take? (1-4)");
add(startTake);
sttf = new JTextField();
add(sttf);
errorTake = new JLabel("Hello");
add(errorTake);
Go = new JButton("Go");
add(Go);
uTake = new JLabel("");
add(uTake);
compTake = new JLabel("");
add(compTake);
// tf1 = new JTextField();
// add(tf1);
// TakeP = new JLabel("One stick taken");
// add(TakeP);
event e = new event();
Go.addActionListener(e);
}
public static class event implements ActionListener {
public void actionPerformed(ActionEvent e) {
int numSticks = 21;
int numToTake = 0;
int randomNum = 0;
while (numSticks > 0) {
try {
int num = (int) (Double.parseDouble(sttf.getText()));
int NumSticks = numSticks - num;
errorTake.setText("There are: " + numSticks + " left");
Robot Rob = new Robot();
numToTake = (int)Math.random() * 4 + 1;
errorTake.setText("There are: " + numSticks + " left");
}
catch (Exception ex) {
ex.printStackTrace();;errorTake.setText("There is a problem");
}
}
}
}
public static void main(String[] args) {
Sticks gui = new Sticks();
gui.setDefaultCloseOperation(EXIT_ON_CLOSE);
gui.setVisible(true);
gui.setSize(600, 200);
gui.setTitle("Nice Game");
}
}
答案 0 :(得分:0)
每当您点击“开始”按钮时,您的actionPerformed会触发,并且根本不会等待用户输入。这是你的问题。
public static class event implements ActionListener {
public void actionPerformed(ActionEvent e) {
//...
int num = (int) (Double.parseDouble(sttf.getText()));
//...
}
}
sttf.getText()总是返回“”,因为sttf为空,程序不会等待用户输入,这与Scanner(System.in)不同。
有意义的是你没有得到任何例外,因为它只是运行并完成游戏而不给用户足够的时间输入任何东西。你确定控制台不打印“仅限数字!”吗?因为我以前从未试图解析过空字符串。
好的,我一直都读错了,抱歉。
每次点击动作时,你的actionListener都会生成一个新游戏,因为你在每次点击时都将numSticks设置为21。展望未来,我认为这不是一个好主意,除非你想在游戏结束前一直采取相同数量的棍棒。同样的事情。如果您在sttf中输入一个值,程序将不会等待您更改它,因为它会继续使用该值,直到您的while循环结束。