java - JOptionPane 消息显示 null

标签 java swing

我们正在开发一个项目,尝试在按下按钮且满足某些条件时在 JOptionPane 中显示一条消息。但是,每当激活代码并按下按钮时,JOptionPane 就会显示,但不会显示任何消息。这是创建 GUI 的代码

 package BlackJack;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import javax.swing.*;

public class BlckJckUI {

public static void main(String[] args) {

    JFrame GUI = new JFrame("Blackjack Advisor");
    GUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    GUI.setSize(1000,900);
    GUI.setVisible(true);
 JButton two = new JButton(Two);
    two.setSize(300, 100);
    two.setLocation(100, 200);
    two.addActionListener(new ActionListener ()
    {
        public void actionPerformed(ActionEvent e)
        {
            Arrays array = new Arrays();
            Math math = new Math();
            math.cardvalue = 2;
            array.clicktracker++;

            JOptionPane.showMessageDialog(null,array.result);
        }
    });
   GUI.add(two);

这是计算逻辑的代码。

package BlackJack;

public class Math {
public int cardvalue;
public Math()
{

    Arrays array = new Arrays();

    if (array.clicktracker == 1)
    {   
        array.dealer = cardvalue;   
        array.result = "Please select the first card you have :)";


    }
    else if (array.clicktracker == 2)
    {

        array.playerhand.add(cardvalue);
        array.result = "Please select the second card you have :)";

    }
    else if (array.clicktracker >= 3)
    {
        array.playerhand.add(cardvalue);
        if (array.playerhandtotal <= 8)
        {

            // array.result = result statement
            array.result = "You should just hit until you're safe. If the dealer 6 or below,\n"
                + " the chances are that he'll bust and if not, remain low above 17.\n"
                + " As long as you can pull a 17 or higher, you should be safe. Pick \n"
                + "another card or reset.";

这是创建数组和与其关联的变量的代码。

package BlackJack;

import java.util.ArrayList;

public class Arrays{
  public String result = null;
    ArrayList<Integer> playerhand = new ArrayList<Integer>();
    public int dealer = 0;
    public int clicktracker = 0;
    public int playerhandtotal = 0;
    {
    for (int element: playerhand)
     {
         playerhandtotal = element + playerhandtotal;
     }
    System.out.println(result);
    System.out.println(dealer);
    System.out.println(clicktracker);
     }
}

最佳答案

在您的 Math 构造函数中,您正在更改与您尝试显示的类型不同的 array.result 类型的结果。

我会考虑将 Arrays 实例传递到 Math 构造函数中,以便您可以从那里修改结果。但请确保不要重新分配实例。

<小时/>
public void actionPerformed(ActionEvent e)
    {
        Arrays array = new Arrays();
        Math math = new Math(array);
        math.cardvalue = 2;
        array.clicktracker++;

        JOptionPane.showMessageDialog(null,array.result);
    }

...

public Math(Arrays array)
{

    if (array.clicktracker == 1)
    {   
    // And so on ...

关于java - JOptionPane 消息显示 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20940056/

相关文章:

java - 如何使用 BorderLayout 将 JPanel 返回到 JFrame 的中心?

java - 是否可以在 JFreeChart 中预定义 Y 轴的最大值?

java - Component.getWidth() 在不同的上下文中返回 0

java - 如何使用 Stream 将 Map of Map 转换为 Map of Object

java - KeyListener 不触发操作

java - 菜单按钮不起作用?

Java 如何重绘JPanel(重新创建对象)?

java - 使用 ActionListener 更改 JTextField 的颜色

java - org.springframework.beans.factory.BeanCreationException :

java - 创建用户定义的数据类型会出现问题