您的代碼在這裏:
javax.swing.JLabel io0Label;
public GUI()
{
mux = new Pin[62];
for (int i = 0; i < mux.length; i++)
{
mux[i] = new Pin();
}
mux[0].ioLabel = io0Label;
}
您聲明io0Label變量,但從來沒有爲它分配一個JLabel實例,因此嘗試使用它總是會產生NPE被拋出。爲了表明這是正確的,請在您的發佈代碼中搜索something = new JLabel(...);
的任何實例,並且您會發現它不存在。
一個特定的狹義答案是告訴你在試圖使用它們之前始終用有效的引用初始化你的變量。
更廣泛的適用答案將需要您詳細描述問題並考慮創建併發布sscce。
順便說一句,你的程序設計不被推薦,因爲你不應該有類直接操作其他類的字段。這增加了你的類的連通性,並可能導致很難調試的錯誤。
例如,你可以,只要讓你的腳類getText()
和setText(String text)
getter和setter方法以及對於返回它作爲一個JComponent的JLabel的getter方法,並使用那些傢伙。
例如,我sscce:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class ControlLabels {
private static void createAndShowGui() {
JFrame frame = new JFrame("ControlLabels");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new Gui());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
class Pin {
private JLabel ioLabel = new JLabel();
public Pin() {
ioLabel.setHorizontalAlignment(SwingConstants.CENTER);
}
public String getText() {
return ioLabel.getText();
}
public void setText(String text) {
ioLabel.setText(text);
}
public JComponent getIoLabel() {
return ioLabel;
}
}
class Gui extends JPanel {
private static final int LABEL_CNT = 50;
private static final int PREF_W = 150;
private static final int PREF_H = 400;
private static final int TIMER_DELAY = 1000;
private Pin[] mux = new Pin[LABEL_CNT];
public Gui() {
JPanel labelPanel = new JPanel(new GridLayout(0, 1));
for (int i = 0; i < mux.length; i++) {
mux[i] = new Pin();
mux[i].setText("mux " + i);
labelPanel.add(mux[i].getIoLabel());
}
setLayout(new BorderLayout());
add(new JScrollPane(labelPanel));
new Timer(TIMER_DELAY, new TimerListener()).start();
}
@Override
public Dimension getPreferredSize() {
return new Dimension(PREF_W, PREF_H);
}
private class TimerListener implements ActionListener {
private static final int MAX_COUNT = 20;
private int count = 0;
@Override
public void actionPerformed(ActionEvent arg0) {
if (count < MAX_COUNT) {
int multiplier = 2;
for (int i = 0; i < count; i++) {
multiplier *= 2;
}
for (int i = 0; i < mux.length; i++) {
mux[i].setText("mux " + (i + multiplier));
}
count++;
} else {
count = 0;
}
}
}
}
對不起,我忘了補充該行。這應該是它的一部分:io0Label = new javax.swing.JLabel(); – phox
@phox:如果我們能夠幫助你,那麼你將不得不提供更多的信息和代碼,正如我在答覆結束時提到的那樣。請檢查[sscce](http://sscce.org)鏈接。 –
@phox:請參閱編輯回答。 –