Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更新JLabel文本时出现问题;与Netbeans 6.9的GUI生成器相关_Java_User Interface_Netbeans 6.9 - Fatal编程技术网

Java 更新JLabel文本时出现问题;与Netbeans 6.9的GUI生成器相关

Java 更新JLabel文本时出现问题;与Netbeans 6.9的GUI生成器相关,java,user-interface,netbeans-6.9,Java,User Interface,Netbeans 6.9,我在下面附加的程序中更新GUI上的JLabel文本时遇到问题 即使我已将每个JLabel分配给数组中相应的索引,lblArray也似乎为null 我确实尝试过使用静态修饰符,从jlabel中删除静态修饰符&可能是其他一些相关变量,比如lblArray,并在main()方法中实例化一个Blackjack类,然后从新对象访问jlabel。但最终的界面是喜怒无常的,每次都会有不同的结果,但基本上是在3种GUI故障之间交替出现的,这些故障有时可以更新,但另一些时间无法更新 GUI由NetBeans 6.

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

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

我确实尝试过使用静态修饰符,从jlabel中删除静态修饰符&可能是其他一些相关变量,比如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());
        }
    }
    }
公共类Blackjack扩展了javax.swing.JFrame{
静态甲板=新甲板(1);
静态int numberOfPlayer=1;
静态播放器阵列[];
静态int序列;
静态JLabel-lblArray[];
/**创造新形式21点*/
公共21点(){
初始化组件();
}
//变量声明-不修改
私有javax.swing.JButton btnHit;
私有javax.swing.JButton btnStand;
私有javax.swing.JButton btnSurrender;
私有静态javax.swing.JLabel lblCard1;
私有静态javax.swing.JLabel lblCard10;
私有静态javax.swing.JLabel lblCard2;
私有静态javax.swing.JLabel lblCard3;
私有静态javax.swing.JLabel lblCard4;
私有静态javax.swing.JLabel lblCard5;
私有静态javax.swing.JLabel lblCard6;
私有静态javax.swing.JLabel lblCard7;
私有静态javax.swing.JLabel lblCard8;
私有静态javax.swing.JLabel lblCard9;
私有javax.swing.JLabel lbldaler;
私有javax.swing.JLabel lblPlayer;
私有javax.swing.JLabel lblTitle;
私有javax.swing.JPanel pnlDealer;
私有javax.swing.JPanel pnlOptions;
javax.swing.JPanel pnlPlayer;
//变量结束声明
公共静态void main(字符串参数[]){
invokeLater(new Runnable()){
公开募捐{
新21点().setVisible(true);
}
});
lblArray=新的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;
}
公共静态无效初始播放(){
//前2张卡片的绘制
对于(int i=0;i,当您将标签放入数组时,gui(及其属性/成员)可能尚未初始化,因为gui创建是在另一个线程中完成的


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

您还没有初始化名为Sequence的整数的值?这可能就是将null值分配给variable Sequence的原因。

哦!我遗漏了一件事,那就是它们在initComponents()中初始化了方法,它是由GUI生成器自动生成的。嘿,泰迪尔。再次查看了您的建议&它起作用了!我将所有逻辑从main()方法移动到Blackjack()方法构造函数&删除了静态修饰符&一切正常!我其实早就知道这一点,但一定已经忘记了,因为自从我上次接触GUI以来已经有一段时间了。无论如何,Thx太多了!不太确定“GUI创建是在另一个线程中完成的”是什么意思。=)谢谢你的建议,MrCool!这不是这个问题的特例,但我确实忘记了初始化“sequence”变量。=)