有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在更新JLabel文本时遇到问题;与Netbeans 6.9的GUI生成器相关

我在下面附加的程序中更新GUI上的JLabel文本时遇到问题

即使我已将每个JLabel分配给数组中相应的索引,lblArray也似乎为null

我确实尝试过通过从JLabels&;中删除静态修改器来使用静态修改器;可能还有其他一些相关变量,比如lblArray,在main()方法中实例化一个Blackjack类,并从新对象访问JLabel。但最终的界面是喜怒无常的,每次都会有不同的结果,但基本上是在3种GUI故障之间交替出现的,这些故障有时可以更新,但另一些时间无法更新

GUI由NetBeans 6.9中的GUI生成器生成

我怀疑这和静态修饰符有关。如果是那个问题,请向我解释。另外,我可以知道我们如何在静态和非静态变量或方法之间进行访问,特别是从static main()方法访问非静态变量吗

顺便说一句,我遇到的另一个问题是没有足够的灵活性来修改GUI生成器生成的代码。有没有办法灵活修改编码

我在这里附上我的代码摘录,因为原始代码可能会很长。我已经包括了我认为与这个问题相关的内容。initComponents()方法中的GUI生成器会自动生成代码,我在下面的编码中省略了这一点

public class Blackjack extends javax.swing.JFrame {

static Deck deck = new Deck(1);
static int numberOfPlayer = 1;
static Player playerArray[];
static int sequence;
static JLabel lblArray[];

/** Creates new form Blackjack */
public Blackjack() {
    initComponents();
}

// Variables declaration - do not modify
private javax.swing.JButton btnHit;
private javax.swing.JButton btnStand;
private javax.swing.JButton btnSurrender;
private static javax.swing.JLabel lblCard1;
private static javax.swing.JLabel lblCard10;
private static javax.swing.JLabel lblCard2;
private static javax.swing.JLabel lblCard3;
private static javax.swing.JLabel lblCard4;
private static javax.swing.JLabel lblCard5;
private static javax.swing.JLabel lblCard6;
private static javax.swing.JLabel lblCard7;
private static javax.swing.JLabel lblCard8;
private static javax.swing.JLabel lblCard9;
private javax.swing.JLabel lblDealer;
private javax.swing.JLabel lblPlayer;
private javax.swing.JLabel lblTitle;
private javax.swing.JPanel pnlDealer;
private javax.swing.JPanel pnlOptions;
javax.swing.JPanel pnlPlayer;
// End of variables declaration

public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Blackjack().setVisible(true);
        }
    });

    lblArray = new JLabel[10];
    lblArray[0] = lblCard1;
    lblArray[1] = lblCard2;
    lblArray[2] = lblCard3;
    lblArray[3] = lblCard4;
    lblArray[4] = lblCard5;
    lblArray[5] = lblCard6;
    lblArray[6] = lblCard7;
    lblArray[7] = lblCard8;
    lblArray[8] = lblCard9;
    lblArray[9] = lblCard10;
    }

    public static void initialPlay() {

    //Drawing of first 2 cards
    for (int i=0; i<2; i++) {
        Card draw = deck.draw();

        if (!playerArray[sequence].isDealer()) {
            lblArray[i].setText(draw.getName());
        }
        else {
            lblArray[i+5].setText(draw.getName());
        }
    }
    }

真的希望你能帮助我,因为我正在赶着完成任务。非常感谢


共 (2) 个答案

  1. # 1 楼答案

    您还没有初始化名为Sequence的整数的值吗?这可能就是将空值分配给变量序列的原因

  2. # 2 楼答案

    当您将标签放入数组时,gui(及其属性/成员)可能尚未初始化,因为gui创建是在另一个线程中完成的

    删除static关键字并将分配标签的代码移动到Blackjack构造函数中