Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java removeAllItems()上的JComboBox错误_Java_Swing_Jcombobox_Indexoutofboundsexception_Updating - Fatal编程技术网

Java removeAllItems()上的JComboBox错误

Java removeAllItems()上的JComboBox错误,java,swing,jcombobox,indexoutofboundsexception,updating,Java,Swing,Jcombobox,Indexoutofboundsexception,Updating,我正在尝试调用ports.removeAllItems()由于端口是JComboBox,我收到了这个错误 Exception in thread "Thread-3" java.lang.IndexOutOfBoundsException: bitIndex < 0: -1 at java.util.BitSet.get(BitSet.java:623) at javax.swing.DefaultListSelectionModel.clear(DefaultListSelectionM

我正在尝试调用
ports.removeAllItems()
由于
端口
JComboBox
,我收到了这个错误

Exception in thread "Thread-3" java.lang.IndexOutOfBoundsException: bitIndex < 0: -1
at java.util.BitSet.get(BitSet.java:623)
at javax.swing.DefaultListSelectionModel.clear(DefaultListSelectionModel.java:278)
at javax.swing.DefaultListSelectionModel.setState(DefaultListSelectionModel.java:584)
at javax.swing.DefaultListSelectionModel.removeIndexInterval(DefaultListSelectionModel.java:652)
at javax.swing.plaf.basic.BasicListUI$Handler.intervalRemoved(BasicListUI.java:2601)
at javax.swing.AbstractListModel.fireIntervalRemoved(AbstractListModel.java:179)
at javax.swing.DefaultComboBoxModel.removeAllElements(DefaultComboBoxModel.java:174)
at javax.swing.JComboBox.removeAllItems(JComboBox.java:771)
at view.MainFrame.lambda$startPortsUpdate$3(MainFrame.java:188)
at java.lang.Thread.run(Thread.java:745)

我发现它很难复制,也不知道该怎么办。目前这不是一个大问题,但如果有人知道是什么导致了这一点,我将不胜感激。另外,如果您对如何更好地更新my
JComboBox
有任何建议,请随时提出建议。

要更快获得更好的帮助,请发布or。您正在自己的线程上修改Swing组件。只能在事件分派线程(EDT)上修改Swing组件。将所有行
ports.removeAllItems()。。。ports.revalidate()
到自己的方法中(但不是
sleep
调用!)。然后,使用
SwingUtilities.invokeLater(()->修改ComboBox()的新方法)将此方法的执行放在EDT上。但请注意,可能还有其他线程问题。您没有提供足够的代码。
private void startPortsUpdate() {
    Thread t = new Thread(() -> {
        while (currentCard.equals(IView.PORT)) { // while we're in port-selection screen
            try {
                Thread.sleep(500);
                ports.removeAllItems();
                for (Object o : getSerialPorts()) {
                    ports.addItem(o);
                }
                ports.revalidate();
            } catch (InterruptedException ex) {
                Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    });
    t.start();
}