Java 更新JLabel文本时出现问题;与Netbeans 6.9的GUI生成器相关
我在下面附加的程序中更新GUI上的JLabel文本时遇到问题 即使我已将每个JLabel分配给数组中相应的索引,lblArray也似乎为null 我确实尝试过使用静态修饰符,从jlabel中删除静态修饰符&可能是其他一些相关变量,比如lblArray,并在main()方法中实例化一个Blackjack类,然后从新对象访问jlabel。但最终的界面是喜怒无常的,每次都会有不同的结果,但基本上是在3种GUI故障之间交替出现的,这些故障有时可以更新,但另一些时间无法更新 GUI由NetBeans 6.9中的GUI生成器生成 我怀疑这和静态修饰符有关。如果是那个问题,请向我解释。另外,我可以知道我们如何在静态和非静态变量或方法之间进行访问,特别是从static main()方法访问非静态变量吗 顺便说一句,我遇到的另一个问题是没有足够的灵活性来修改GUI生成器生成的代码。有没有办法灵活修改编码 我在这里附上我的代码摘录,因为原始代码可能会很长。我已经包括了我认为与这个问题相关的内容。initComponents()方法中的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.
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”变量。=)