ここにあなたのコード:
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()
たとえば、Pin クラス、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;
}
}
}
}