我有設置一個變量的靜態方法:爲什麼我在循環中看不到一個靜態變量?
static String[] playersNames;
public static void setParameters(String[] players) {
playersNames = players;
}
然後,我有一個靜態塊:
static {
JRadioButton option;
ButtonGroup group = new ButtonGroup();
// Wright a short explanation of what the user should do.
partnerSelectionPanel.add(new JLabel("Pleas select a partner:"));
// Generate radio-buttons corresponding to the options available to the player.
// Bellow is the problematic line causing the null pointer exception:
for (String playerName: playersNames) {
final String pn = playerName;
option = new JRadioButton(playerName, false);
option.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent evt) {
partner = pn;
}
});
partnerSelectionPanel.add(option);
group.add(option);
}
partnerSelectionPanel.add(label);
// Add the "Submit" button to the end of the "form".
JButton submitButton = new JButton("Submit");
submitButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent evt) {
partnerSelected();
}
});
partnerSelectionPanel.add(submitButton);
}
編譯器不會抱怨什麼,但是當我嘗試執行代碼,我得到的問題。在這個地方SelectPartnerGUI.setParameters(players);
我有:在線程 「主要」 java.lang.ExceptionInitializerError
例外。
它是由java.lang.NullpointerException在這個地方for (String playerName: playersNames)
引起的。
我的程序沒有看到palyersNames嗎?
我第一次用這種方式提到這個類:SelectPartnerGUI.setParameters(players);
。而在我的班級中,我在問題靜態塊之前有setParameters
方法。那麼,爲什麼在調用setParameters
方法之前調用這個靜態塊呢?
之前運行,我想將我的類構造爲一組靜態方法。原因是我只有一個類的實例。所以,我認爲使用構造函數和實例化類是一個牀頭的想法。但後來我意識到我在課堂的靜態領域存在問題。我不知道如何從「外部」設置這些字段的值。 – Roman 2010-03-22 12:21:11
@羅曼,如果你真的只需要一個實例,你應該使用單例模式。然而,在這種情況下,應用程序模式對話框可能是您實際需要的。 – extraneon 2010-03-22 12:23:08
然後*只是*只構造它的一個實例。你認爲只有一個實例並不一定意味着你需要將所有東西都變成靜態的。有些人只有一輛汽車,但這並不意味着你應該讓汽車保持靜止。順便說一句:單身模式可能不適用於此。您可以完全控制代碼。如上所述,只創建一個實例並永久重用它。就這樣。 – BalusC 2010-03-22 12:24:15