- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有以下代码并且刚刚得到 ConcurrentModificationException。
fchProtocol = new FileChooser(lastFileLoc);
FileNameExtensionFilter xmlfilter = new FileNameExtensionFilter("xml files (*.xml)", "xml");
fchProtocol.setFileFilter(xmlfilter); <<<< ***** exception from here
异常跟踪信息:
java.util.ConcurrentModificationException
java.util.Vector$Itr.checkForComodification(Vector.java:1184)
java.util.Vector$Itr.next(Vector.java:1137)
javax.swing.plaf.basic.BasicDirectoryModel$LoadFilesThread.cancelRunnables(BasicDirectoryModel.java:340)
javax.swing.plaf.basic.BasicDirectoryModel$LoadFilesThread.cancelRunnables(BasicDirectoryModel.java:346)
javax.swing.plaf.basic.BasicDirectoryModel.validateFileCache(BasicDirectoryModel.java:135)
javax.swing.plaf.basic.BasicDirectoryModel.propertyChange(BasicDirectoryModel.java:69)
java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335)
java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:327)
java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:263)
java.awt.Component.firePropertyChange(Component.java:8422)
javax.swing.JFileChooser.setFileFilter(JFileChooser.java:1473)
这是 Java API 方法代码。它是最后一行抛出异常。
public void setFileFilter(FileFilter filter) {
FileFilter oldValue = fileFilter;
fileFilter = filter;
if (filter != null) {
if (isMultiSelectionEnabled() && selectedFiles != null && selectedFiles.length > 0) {
Vector<File> fList = new Vector<File>();
boolean failed = false;
for (File file : selectedFiles) {
if (filter.accept(file)) {
fList.add(file);
} else {
failed = true;
}
}
if (failed) {
setSelectedFiles((fList.size() == 0) ? null : fList.toArray(new File[fList.size()]));
}
} else if (selectedFile != null && !filter.accept(selectedFile)) {
setSelectedFile(null);
}
}
firePropertyChange(FILE_FILTER_CHANGED_PROPERTY, oldValue, fileFilter);
}
这发生在 GUI 初始化阶段。 xmlfileter 是一个局部变量。
我在 Linux 中使用 javaVersion = 1.8.0_20。它是不可重现的,在我的开发过程中今年只发生了三次。
我不知道如何避免这种情况,或者如何正确使用 FileChooser 及其 FileFilter。任何人都可以帮助我吗?
编辑:
它发生在应用程序初始化阶段:
.
SwingUtilities.invokeAndWait(new Runnable()
public void run()
{
initalize GUI classes from here
}
);
进行 GUI 初始化,但在前几步的 GUI 初始化线程中失败。 GUI 初始化线程中没有其他线程。而且主线程也没有访问GUI初始化线程的 Action 。
此时基本有两个线程:主线程和通过调用 invorkAndWait() 启动的 GUI 初始化线程。
最佳答案
如果您在 Event Dispatch Thread 之外的其他线程上执行 GUI 操作,这种情况在 Swing 中一直会发生。特别是“不可复制”是一个线索。这是一个计时问题,并发线程正在处理 GUI,而只有 EDT 应该这样做。参见 here获取更多信息。所以在 SwingUtilities.invokeLater
中包装 GUI 相关的东西,在你的情况下:
final FileFilter oldValue = fileFilter;
...
SwingUtilities.invokeLater(new Runnable() {
public void run() {
firePropertyChange(FILE_FILTER_CHANGED_PROPERTY, oldValue, fileFilter);
}
});
关于java - 如何避免 JFileChooser.setFileFilter() 调用中的 ConcurrentModificationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30357978/
这个问题在这里已经有了答案: Why is a ConcurrentModificationException thrown and how to debug it (8 个答案) 关闭 3 年前。
这个问题已经有答案了: Concurrent Modification exception [duplicate] (9 个回答) 已关闭 8 年前。 在oldSet.removeAll(已删除);抛
这个问题在这里已经有了答案: Concurrent Modification exception [duplicate] (9 个回答) 关闭 9 年前。 我的程序抛出 ConcurrentModi
我有以下结构: public class Object1{ private HashMap myMap; ... public void cancelItem(Item o)
在本例中使用 list.remove((Object)93) 会导致 ConcurrentModificationException: List list = new ArrayList<>(); l
更新应用程序后,我收到来自 Firebase 的错误几乎在所有 Activity 中。 Fatal Exception: java.lang.RuntimeException: Unable to s
我有大量的东西,一个重复迭代它们的线程,以及一个偶尔删除或添加单个东西的单独线程。事物在同步链表中: private List things = Collections.synchronizedLis
在 DTO 中我有 public class ProductTypesDto extends BaseDto { private List colors = new ArrayList<>();
我正在创建一个 Swing 应用程序来制作游戏。它在屏幕外的随机位置创建图像,当它们离开屏幕时我想将它们删除。请看一下代码片段: public void checkTrolls(){ //CAUSES
我在向 Android 表插入数据时遇到问题。这是我的 Dao 函数: @Insert(onConflict = OnConflictStrategy.REPLACE) fun insert(frei
我有一个 Grails (2.4.3) 应用程序,它使用 PersistenceListener 来监听 GORM 事件。 PersistenceListener 工作正常。在 PreUpdate 事
基于 Spring Boot、spring-data-jpa 的大型 REST Web 应用程序。我有 PersonEntity ,它与 ParentEntity 具有 ManyToOne 关系。关系
我有一个作业要编写一个 Java 程序,该程序将读取上下文无关语法并返回所有非终结符的 FirstSet。我使用 FirstSet() 方法采用了递归方法: public static ArrayLi
我收到java.util.ConcurrentModificationException,但我不知道为什么。 在 Logcat 中,它指向此代码,但我没有看到任何可能导致 ConcurrentModi
我在以下情况下收到 ConcurrentModificationException 错误。线路发生这种情况的地方标有“ list = Collections.synchronizedList(them
自过去两个小时以来,我一直在尝试解决此异常..我得到了抛出异常的代码行..但没有找到解决方案..请帮助我发生错误@ mUsers.add(user);//在其他部分 private void read
我有以下代码: List list = getItems(); //where getItems() returns List do { list.add(ad
我得到ConcurrentModificationException当迭代 map 的内容时 for (String sourceKey : sMap.getContent().keySet(
代码是葡萄牙语的,对此我很抱歉。 我在这里读到另一个问题,因为我正在使用progSelecionada.remove(),所以抛出了异常,所以我更改为iterator.remove()但错误仍然存
我目前正在用 Java 编写多人游戏。我当前的代码(即出现错误)是这样的。 @Override public void onClose(WebSocket conn, int code, String
我是一名优秀的程序员,十分优秀!