我有一个JComponent,它在类的主体中声明,并在一个名为on construction的方法中初始化,但是当我尝试从同一个类中的不同方法访问其初始化方法之外的JComponent时,它返回null 。我不确定问题的答案是否存在,但我似乎无法理解为什么会发生这种情况。
class panelSets {
public JPanel sell_buy() {
buy = new monetaryField("Buy: ",0);
}
public JSplitPane tax_profit() { //Called on initialization
cost = new monetaryField("- Cost: ",1);
}
public void setCost() {
this.cost.copper.setText("33"); //Here is where the error occurs
}
monetaryField buy;
monetaryField cost;
}
这只是我的代码的一小部分,其中包含此实例。如果它不在这里,我总能发布更多。另外,为了澄清,无法访问“cost”的子项,因为setCost()的“cost”为null。
编辑:为了让每个人都变得更糟,可以从任何地方访问“购买”。
monetaryField(String s, int i) {
label = new JLabel(s);
gold = new singleField("gold.png");
silver = new singleField("silver.png");
copper = new singleField("copper.png");
gold.addKeyListener(keys);
silver.addKeyListener(keys);
copper.addKeyListener(keys);
if(i == 1) {
gold.setEditable(false);
silver.setEditable(false);
copper.setEditable(false);
}
GroupLayout layout = new GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createSequentialGroup()
.addComponent(label)
.addComponent(gold)
.addComponent(silver)
.addComponent(copper)
);
layout.setVerticalGroup(
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(label)
.addComponent(gold)
.addComponent(silver)
.addComponent(copper)
));
}
...
singleField(String s) { //Outputs a JFormattedTextField with an icon at the end
setOpaque(false);
image = getImage(s);
}
答案 0 :(得分:3)
检查monetaryField
的构造函数并确保copper
已在其中初始化,此时显然是null
:
this.cost.copper.setText("33");
^
NullPointerException