JToggleButton
要素の構成 (望遠鏡構成) をメモリにロード/メモリから破棄するように をプログラミングしているので、 に を追加JComboBox
し、JFrame
その近くに選択した項目をロードするボタンを追加しました。を選択するJToggleButton
と、ハードディスク アイコンが表示されます。それ以外の場合は、別のアイコンが表示されます。そのために IntelliJ IDEA GUI エディターを使用しています。もちろん、ItemListener
そのボタンに (Web から提案されているように) を追加しました。
loadTelescopeButton.setSelected(true);
System.out.println(loadTelescopeButton.isSelected());
loadTelescopeButton.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
System.out.println("LAODACTION " + loadTelescopeButton.isSelected());
try {
if (e.getStateChange() == ItemEvent.SELECTED) {
String selected = telescopesList.getSelectedItem().toString();
if ((selected != null) && (!selected.equals("")) && (ObjUtils.isAlphaNumeric(selected))) {
//...
} else {
showErrorMessage("Invalid id selected!");
}
} else if (e.getStateChange() == ItemEvent.DESELECTED) {
if ((configurationActivity != null) && (configurationActivity.getManager() != null) &&
(configurationActivity.getTelescope() != null) && (configurationActivity.getTelescope().isConnected())) {
//...
} else {
//...
}
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
});
出力:
true
-> ウィンドウが表示された
LAOD_ACTION false
とき -> ボタンをクリックしたとき
いくつかの新しいトグル ボタンを使用していくつかのテストを行ったところ、同じエラーが発生しました。内部のコードitemStateChanged(ItemEvent e) {...}
は停止せずに永遠に繰り返されます。そのコードにはfor
andwhile
ループはありません! その結果、多数のメッセージ ダイアログが表示され (1 つのダイアログのみが表示されます)、デスクトップで別のウィンドウにフォーカスすると、ダイアログの背後の画面 (親ウィンドウの領域) が黒くなります。リスナーを に変更したところActionListener
、すべてが 1 回/クリックで実行されるようになりました。
なぜこのエラーですか?ご覧のとおり、 https://stackoverflow.com/a/7524627/6267019からそのコードをコピーしました。
GitHub の完全なコードここでは、そのトグル ボタンのコードを強調表示しました。JToggleButton
ファイル内の他の s でも同じエラーが発生しMainActivity.java
、IntelliJ をデバッグすると、リスナー内のコードが永遠に繰り返されることがわかります。数千回のダイアログの後、Windows にメッセージが表示され、Java Platform Binary がエラーで閉じられます。
編集:
新しいクラスの同じ問題:
import javax.swing.*;
import java.awt.*;
public class ErrorGUI extends JFrame {
public ErrorGUI() throws HeadlessException {
super("ciao");
JPanel panel1 = new JPanel();
setContentPane(panel1);
JToggleButton ciaoToggleButton = new JToggleButton("cajs");
ciaoToggleButton.setSelected(true);
ciaoToggleButton.addItemListener(e -> {
System.out.println("caiooasfsdvn");
try {
JOptionPane.showMessageDialog(panel1, "skjngksfnb");
} catch (Exception e2) {
e2.printStackTrace();
}
});
panel1.add(ciaoToggleButton);
pack();
setVisible(true);
}
public static void main(String[] args) {
new ErrorGUI();
}
}