我正在使用 Java 创建一个 Tic-Tac-Toe 游戏。现在,我有了它,因此当您单击一个按钮时,该按钮JButton将从 中删除JPanel,JLabel添加一个包含 X 或 O 图像的图像,并且JPanel将重新绘制。但是,当我单击该按钮时,图像不会显示,但按钮消失。
创建按钮和JLabel/ Image:
package tictactoe;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.ImageIcon;
public class TicTacToe implements ActionListener
{
private JFrame holder = new JFrame();
private GridLayout layout = new GridLayout(3,3);
private FlowLayout panel = new FlowLayout(FlowLayout.CENTER);
private JPanel p11, p12, p13, p21, p22, p23, p31, p32, p33;
private JButton b1, b2, b3, b4, b5, b6, b7, b8, b9;
private …Run Code Online (Sandbox Code Playgroud) 谢谢你读这个.我正在使用java创建一个简单的通用版二十一点.其他所有工作都完全正常,除非它要求你"击中或通过"而你输入pass,你必须输入两次才能重新组合它,我似乎无法找出原因.继承了我在pastebin上的代码,使其更易于阅读:http://pastebin.com/GF7Rzusx
来自pastebin的相关代码:
public void ask()
{
System.out.println("Hit or Pass?");
if (in.next().equalsIgnoreCase("Hit"))
{
hit();
}
if (in.next().equalsIgnoreCase("Pass"))
{
pass();
}
}
Run Code Online (Sandbox Code Playgroud) 这是我的程序界面的图片,只是为了简单解释我的问题. 
所以程序从这个屏幕开始,第一步是编辑你的名字,点击编辑名称按钮,调用这个方法:
private void editName() {
NameLabel = new javax.swing.JLabel();
NameField = new javax.swing.JTextField();
Sumbit = new javax.swing.JButton();
Sumbit.addActionListener(this);
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setAlwaysOnTop(true);
setType(java.awt.Window.Type.POPUP);
NameLabel.setText("Name:");
NameField.setText(name);
Sumbit.setText("Sumbit");
..location code..
Run Code Online (Sandbox Code Playgroud)
因此,您在弹出的文本字段中键入您的姓名,然后点击提交.然后我收到这个错误:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at kraz.Kraz.game(Kraz.java:62)
at kraz.Kraz.actionPerformed(Kraz.java:186)
Run Code Online (Sandbox Code Playgroud)
第186行的actionPerformed是提交按钮:
else if (e.getSource() == Sumbit)
{
name = NameField.getText();
NameField.setText("" + name);
if (step == 1)
{
++step;
game();
}
}
Run Code Online (Sandbox Code Playgroud)
第62行是我调用game()方法的地方.第162行是下一个:
public void game() {
if (step == 1)
{
HealthBar.setValue(100);
}
else if (step == 2)
{
EventField.setText("Test");
ProgressBar.setValue(1);
} …Run Code Online (Sandbox Code Playgroud) 对于我正在处理的程序,我有一个包含类似于此的文本文件:
{0: {2: 1, 1: 1}, 1: {2: 1, 0: 1}, 2: {0: 1, 1: 1}}
Run Code Online (Sandbox Code Playgroud)
其中第一个数字是节点的索引,以下是此节点连接的后续节点列表及其权重.我想知道最好的方法是能够抓住一对{}中包含的单个集合,所以我最终会得到这样的结果:
0:
{2: 1, 1: 1}
1:
{2: 1, 0: 1}
Run Code Online (Sandbox Code Playgroud)
目前我的计划是找到第一个冒号的索引,并将open括号和冒号之间的内容作为ID,然后找到下一个打开的括号并跟随冒号获取以下一组节点,但它很快变得复杂更大的列表,并想知道是否有更好的方法
java ×3
swing ×2
blackjack ×1
jbutton ×1
jlabel ×1
python ×1
python-3.x ×1
string ×1
validation ×1