1

私は次のコードを持っています:

ActionListener listenerComboVehicle = new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        comboVehicle.removeActionListener(listenerComboVehicle);
        frameCrewSelection.removeAll();
        frameCrewSelection.add(formCrewSelectionForm(SpaceObjectArray.findMannedByName(comboVehicle.getSelectedItem().toString()))); //Create some controls (Jcombobox comboVehicle included) and assign listeners to them.
        formComboCrews(); //Modify JCombobox controls content
    }
};

そして、私のアプリケーションは次のコードでハングしますEventDispatchThread.java

void pumpEventsForFilter(int id, Conditional cond, EventFilter filter) {
    addEventFilter(filter);
    while (doDispatch && cond.evaluate()) {
        if (isInterrupted() || !pumpOneEventForFilters(id)) {
            doDispatch = false;
        }
    }
    removeEventFilter(filter);
}

whileループは無限であり、アプリケーションがハングします。がない場合.removeAll()、アプリケーションはハングしませんが、古いコントロールよりも新しいコントロールを取得します。フレームを破棄して再作成することで回避策を見つけましたが、見た目が悪いです。必要に応じて追加のコードが提供されます。助けてください。

4

1 に答える 1

0

Moved from comments for better view:

frameCrewSelection.getContentPane().removeAll(); frameCrewSelection.setContentPane(formCrewSelectionForm(SpaceObjectArray.findMan‌​nedByName(comboVehicle.getSelectedItem().toString())));

made it work.

于 2013-12-10T15:30:44.723 に答える