From 940996aa30df6db9945fa1a01d58e35884b6eb03 Mon Sep 17 00:00:00 2001 From: Zukero Date: Thu, 2 Mar 2017 13:53:24 +0100 Subject: [PATCH] Some refactoring. Replaced all "listeners" list by instances of CopyOnWriteArrayList, to allow listeners to unregister themselves due to an event while preventing ConcurrentModificationExceptions. Modified all GameDataElement.elementChanged concrete implementation to remove the backlink from the oldOne.An element pointed by an altered element will not show the game source element in its backlink list anymore. --- .../gpl/rpg/atcontentstudio/Notification.java | 3 ++- .../model/gamedata/Dialogue.java | 4 ++++ .../model/gamedata/Droplist.java | 1 + .../atcontentstudio/model/gamedata/Item.java | 5 ++++ .../atcontentstudio/model/gamedata/NPC.java | 4 ++++ .../atcontentstudio/model/maps/TMXMap.java | 7 +++--- .../atcontentstudio/model/maps/TMXMapSet.java | 1 - .../model/maps/WorldmapSegment.java | 2 +- .../gpl/rpg/atcontentstudio/ui/Editor.java | 3 ++- .../ui/JSONCreationWizard.java | 5 ++-- .../atcontentstudio/ui/JSONImportWizard.java | 5 ++-- .../atcontentstudio/ui/NotificationsPane.java | 3 ++- .../ui/ProjectCreationWizard.java | 3 ++- .../rpg/atcontentstudio/ui/ProjectsTree.java | 3 ++- .../ui/TMXMapCreationWizard.java | 5 ++-- .../atcontentstudio/ui/WorkspaceActions.java | 24 +++++++------------ .../ui/WorldmapCreationWizard.java | 3 ++- .../ui/WorldmapLabelEditionWizard.java | 3 ++- .../ui/gamedataeditors/DialogueEditor.java | 7 +++--- .../ui/gamedataeditors/DroplistEditor.java | 3 ++- .../ui/gamedataeditors/ItemEditor.java | 7 +++--- .../ui/gamedataeditors/NPCEditor.java | 5 ++-- .../ui/gamedataeditors/QuestEditor.java | 3 ++- .../atcontentstudio/ui/map/TMXMapEditor.java | 15 ++++++------ .../ui/sprites/SpritesheetEditor.java | 5 ++-- .../ui/tools/ItemsTableView.java | 3 ++- .../ui/tools/NPCsTableView.java | 3 ++- 27 files changed, 81 insertions(+), 54 deletions(-) diff --git a/src/com/gpl/rpg/atcontentstudio/Notification.java b/src/com/gpl/rpg/atcontentstudio/Notification.java index 5054af7..fa25ebc 100644 --- a/src/com/gpl/rpg/atcontentstudio/Notification.java +++ b/src/com/gpl/rpg/atcontentstudio/Notification.java @@ -2,11 +2,12 @@ package com.gpl.rpg.atcontentstudio; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; public class Notification { public static List notifs = new ArrayList(); - private static List listeners = new ArrayList(); + private static List listeners = new CopyOnWriteArrayList(); public static boolean showS = true, showI = true, showW = true, showE = true; static { diff --git a/src/com/gpl/rpg/atcontentstudio/model/gamedata/Dialogue.java b/src/com/gpl/rpg/atcontentstudio/model/gamedata/Dialogue.java index de8907a..7772327 100644 --- a/src/com/gpl/rpg/atcontentstudio/model/gamedata/Dialogue.java +++ b/src/com/gpl/rpg/atcontentstudio/model/gamedata/Dialogue.java @@ -349,18 +349,21 @@ public class Dialogue extends JSONElement { @Override public void elementChanged(GameDataElement oldOne, GameDataElement newOne) { if (switch_to_npc == oldOne) { + oldOne.removeBacklink(this); switch_to_npc = (NPC) newOne; if (newOne != null) newOne.addBacklink(this); } else { if (replies != null) { for (Reply r : replies) { if (r.next_phrase == oldOne) { + oldOne.removeBacklink(this); r.next_phrase = (Dialogue) newOne; if (newOne != null) newOne.addBacklink(this); } if (r.requirements != null) { for (Requirement req : r.requirements) { if (req.required_obj == oldOne) { + oldOne.removeBacklink(this); req.required_obj = newOne; if (newOne != null) newOne.addBacklink(this); } @@ -371,6 +374,7 @@ public class Dialogue extends JSONElement { if (rewards != null) { for (Reward r : rewards) { if (r.reward_obj == oldOne) { + oldOne.removeBacklink(this); r.reward_obj = newOne; if (newOne != null) newOne.addBacklink(this); } diff --git a/src/com/gpl/rpg/atcontentstudio/model/gamedata/Droplist.java b/src/com/gpl/rpg/atcontentstudio/model/gamedata/Droplist.java index 4b33256..e00224a 100644 --- a/src/com/gpl/rpg/atcontentstudio/model/gamedata/Droplist.java +++ b/src/com/gpl/rpg/atcontentstudio/model/gamedata/Droplist.java @@ -194,6 +194,7 @@ public class Droplist extends JSONElement { if (dropped_items != null) { for (DroppedItem di : dropped_items) { if (di.item == oldOne) { + oldOne.removeBacklink(this); di.item = (Item) newOne; if (newOne != null) newOne.addBacklink(this); } diff --git a/src/com/gpl/rpg/atcontentstudio/model/gamedata/Item.java b/src/com/gpl/rpg/atcontentstudio/model/gamedata/Item.java index 1c76975..886b8ae 100644 --- a/src/com/gpl/rpg/atcontentstudio/model/gamedata/Item.java +++ b/src/com/gpl/rpg/atcontentstudio/model/gamedata/Item.java @@ -451,12 +451,14 @@ public class Item extends JSONElement { @Override public void elementChanged(GameDataElement oldOne, GameDataElement newOne) { if (this.category == oldOne) { + oldOne.removeBacklink(this); this.category = (ItemCategory) newOne; if (newOne != null) newOne.addBacklink(this); } else { if (this.equip_effect != null && this.equip_effect.conditions != null) { for (ConditionEffect c : this.equip_effect.conditions) { if (c.condition == oldOne) { + oldOne.removeBacklink(this); c.condition = (ActorCondition) newOne; if (newOne != null) newOne.addBacklink(this); } @@ -465,6 +467,7 @@ public class Item extends JSONElement { if (this.hit_effect != null && this.hit_effect.conditions_source != null) { for (TimedConditionEffect c : this.hit_effect.conditions_source) { if (c.condition == oldOne) { + oldOne.removeBacklink(this); c.condition = (ActorCondition) newOne; if (newOne != null) newOne.addBacklink(this); } @@ -473,6 +476,7 @@ public class Item extends JSONElement { if (this.hit_effect != null && this.hit_effect.conditions_target != null) { for (TimedConditionEffect c : this.hit_effect.conditions_target) { if (c.condition == oldOne) { + oldOne.removeBacklink(this); c.condition = (ActorCondition) newOne; if (newOne != null) newOne.addBacklink(this); } @@ -482,6 +486,7 @@ public class Item extends JSONElement { if (this.kill_effect != null && this.kill_effect.conditions_source != null) { for (TimedConditionEffect c : this.kill_effect.conditions_source) { if (c.condition == oldOne) { + oldOne.removeBacklink(this); c.condition = (ActorCondition) newOne; if (newOne != null) newOne.addBacklink(this); } diff --git a/src/com/gpl/rpg/atcontentstudio/model/gamedata/NPC.java b/src/com/gpl/rpg/atcontentstudio/model/gamedata/NPC.java index bb973bb..e281ab1 100644 --- a/src/com/gpl/rpg/atcontentstudio/model/gamedata/NPC.java +++ b/src/com/gpl/rpg/atcontentstudio/model/gamedata/NPC.java @@ -357,16 +357,19 @@ public class NPC extends JSONElement { @Override public void elementChanged(GameDataElement oldOne, GameDataElement newOne) { if (dialogue == oldOne) { + oldOne.removeBacklink(this); this.dialogue = (Dialogue) newOne; if (newOne != null) newOne.addBacklink(this); } else { if (this.droplist == oldOne) { + oldOne.removeBacklink(this); this.droplist = (Droplist) newOne; if (newOne != null) newOne.addBacklink(this); } else { if (this.hit_effect != null && this.hit_effect.conditions_source != null) { for (TimedConditionEffect tce : this.hit_effect.conditions_source) { if (tce.condition == oldOne) { + oldOne.removeBacklink(this); tce.condition = (ActorCondition) newOne; if (newOne != null) newOne.addBacklink(this); } @@ -375,6 +378,7 @@ public class NPC extends JSONElement { if (this.hit_effect != null && this.hit_effect.conditions_target != null) { for (TimedConditionEffect tce : this.hit_effect.conditions_target) { if (tce.condition == oldOne) { + oldOne.removeBacklink(this); tce.condition = (ActorCondition) newOne; if (newOne != null) newOne.addBacklink(this); } diff --git a/src/com/gpl/rpg/atcontentstudio/model/maps/TMXMap.java b/src/com/gpl/rpg/atcontentstudio/model/maps/TMXMap.java index bd38d86..c43e774 100644 --- a/src/com/gpl/rpg/atcontentstudio/model/maps/TMXMap.java +++ b/src/com/gpl/rpg/atcontentstudio/model/maps/TMXMap.java @@ -12,6 +12,7 @@ import java.util.Enumeration; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.concurrent.CopyOnWriteArrayList; import javax.swing.tree.TreeNode; @@ -439,7 +440,7 @@ public class TMXMap extends GameDataElement { this.link(); changedOnDisk = false; - for (MapChangedOnDiskListener l : new ArrayList(listeners)) { + for (MapChangedOnDiskListener l : listeners) { l.mapReloaded(); } } @@ -449,7 +450,7 @@ public class TMXMap extends GameDataElement { dismissNextChangeNotif--; } else { changedOnDisk = true; - for (MapChangedOnDiskListener l : new ArrayList(listeners)) { + for (MapChangedOnDiskListener l : listeners) { l.mapChanged(); } } @@ -460,7 +461,7 @@ public class TMXMap extends GameDataElement { public void mapReloaded(); } - private List listeners = new ArrayList(); + private List listeners = new CopyOnWriteArrayList(); public void addMapChangedOnDiskListener(MapChangedOnDiskListener l) { listeners.add(l); diff --git a/src/com/gpl/rpg/atcontentstudio/model/maps/TMXMapSet.java b/src/com/gpl/rpg/atcontentstudio/model/maps/TMXMapSet.java index 5598faa..c9bcccd 100644 --- a/src/com/gpl/rpg/atcontentstudio/model/maps/TMXMapSet.java +++ b/src/com/gpl/rpg/atcontentstudio/model/maps/TMXMapSet.java @@ -108,7 +108,6 @@ public class TMXMapSet implements ProjectTreeNode { for (WatchEvent event : wk.pollEvents()) { Path changed = (Path) event.context(); String name = changed.getFileName().toString(); - System.out.println("Changed: "+name); String id = name.substring(0, name.length() - 4); TMXMap map = getMap(id); if (map != null) { diff --git a/src/com/gpl/rpg/atcontentstudio/model/maps/WorldmapSegment.java b/src/com/gpl/rpg/atcontentstudio/model/maps/WorldmapSegment.java index b2f3162..fc2d7e3 100644 --- a/src/com/gpl/rpg/atcontentstudio/model/maps/WorldmapSegment.java +++ b/src/com/gpl/rpg/atcontentstudio/model/maps/WorldmapSegment.java @@ -103,7 +103,7 @@ public class WorldmapSegment extends GameDataElement { @Override public void elementChanged(GameDataElement oldOne, GameDataElement newOne) { oldOne.removeBacklink(this); - newOne.addBacklink(this); + if(newOne != null) newOne.addBacklink(this); } @Override diff --git a/src/com/gpl/rpg/atcontentstudio/ui/Editor.java b/src/com/gpl/rpg/atcontentstudio/ui/Editor.java index 77c9df8..9811eb8 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/Editor.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/Editor.java @@ -14,6 +14,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.regex.Matcher; import javax.swing.AbstractListModel; @@ -681,7 +682,7 @@ public abstract class Editor extends JPanel implements ProjectElementListener { return null; } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { diff --git a/src/com/gpl/rpg/atcontentstudio/ui/JSONCreationWizard.java b/src/com/gpl/rpg/atcontentstudio/ui/JSONCreationWizard.java index 49f430a..48b320e 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/JSONCreationWizard.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/JSONCreationWizard.java @@ -10,6 +10,7 @@ import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; import javax.swing.ComboBoxModel; import javax.swing.DefaultListCellRenderer; @@ -518,7 +519,7 @@ public class JSONCreationWizard extends JDialog { return DataType.values()[index]; } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { @@ -584,7 +585,7 @@ public class JSONCreationWizard extends JDialog { public void elementCreated(JSONElement created); } - private List listeners = new ArrayList(); + private List listeners = new CopyOnWriteArrayList(); public void addCreationListener(CreationCompletedListener l) { listeners.add(l); diff --git a/src/com/gpl/rpg/atcontentstudio/ui/JSONImportWizard.java b/src/com/gpl/rpg/atcontentstudio/ui/JSONImportWizard.java index c270ffd..2d9c34f 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/JSONImportWizard.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/JSONImportWizard.java @@ -15,6 +15,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.concurrent.CopyOnWriteArrayList; import javax.swing.ButtonGroup; import javax.swing.ComboBoxModel; @@ -603,7 +604,7 @@ public class JSONImportWizard extends JDialog { return null; } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { @@ -639,7 +640,7 @@ public class JSONImportWizard extends JDialog { return DataType.values()[index]; } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { diff --git a/src/com/gpl/rpg/atcontentstudio/ui/NotificationsPane.java b/src/com/gpl/rpg/atcontentstudio/ui/NotificationsPane.java index c7e55ce..4e30225 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/NotificationsPane.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/NotificationsPane.java @@ -8,6 +8,7 @@ import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.CopyOnWriteArrayList; import javax.imageio.ImageIO; import javax.swing.BorderFactory; @@ -101,7 +102,7 @@ public class NotificationsPane extends JList { } } - private List listeners = new ArrayList(); + private List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { listeners.add(l); diff --git a/src/com/gpl/rpg/atcontentstudio/ui/ProjectCreationWizard.java b/src/com/gpl/rpg/atcontentstudio/ui/ProjectCreationWizard.java index f03de88..0a5ee20 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/ProjectCreationWizard.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/ProjectCreationWizard.java @@ -11,6 +11,7 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; import javax.swing.ComboBoxModel; import javax.swing.JButton; @@ -67,7 +68,7 @@ public class ProjectCreationWizard extends JDialog { return Project.ResourceSet.values()[index]; } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { diff --git a/src/com/gpl/rpg/atcontentstudio/ui/ProjectsTree.java b/src/com/gpl/rpg/atcontentstudio/ui/ProjectsTree.java index 7d5bc42..a7648ab 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/ProjectsTree.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/ProjectsTree.java @@ -11,6 +11,7 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; import javax.swing.ImageIcon; import javax.swing.JLabel; @@ -655,7 +656,7 @@ public class ProjectsTree extends JPanel { return ((ProjectTreeNode)parent).getIndex((ProjectTreeNode) child); } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addTreeModelListener(TreeModelListener l) { diff --git a/src/com/gpl/rpg/atcontentstudio/ui/TMXMapCreationWizard.java b/src/com/gpl/rpg/atcontentstudio/ui/TMXMapCreationWizard.java index 373f6ce..c170c46 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/TMXMapCreationWizard.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/TMXMapCreationWizard.java @@ -9,6 +9,7 @@ import java.awt.event.ActionListener; import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; import javax.swing.ButtonGroup; import javax.swing.ComboBoxModel; @@ -231,7 +232,7 @@ public class TMXMapCreationWizard extends JDialog { public void mapCreated(TMXMap created); } - private List listeners = new ArrayList(); + private List listeners = new CopyOnWriteArrayList(); public void addCreationListener(CreationCompletedListener l) { listeners.add(l); @@ -257,7 +258,7 @@ public class TMXMapCreationWizard extends JDialog { return proj.getMap(index); } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { diff --git a/src/com/gpl/rpg/atcontentstudio/ui/WorkspaceActions.java b/src/com/gpl/rpg/atcontentstudio/ui/WorkspaceActions.java index 482cbbf..77761b2 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/WorkspaceActions.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/WorkspaceActions.java @@ -12,6 +12,8 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentSkipListSet; +import java.util.concurrent.CopyOnWriteArrayList; import javax.swing.Action; import javax.swing.JFileChooser; @@ -452,10 +454,8 @@ public class WorkspaceActions { public void putValue(String key, Object value) { PropertyChangeEvent event = new PropertyChangeEvent(this, key, values.get(key), value); values.put(key, value); - synchronized(listeners) { - for (PropertyChangeListener l : listeners) { - l.propertyChange(event); - } + for (PropertyChangeListener l : listeners) { + l.propertyChange(event); } } @@ -463,10 +463,8 @@ public class WorkspaceActions { public void setEnabled(boolean b) { PropertyChangeEvent event = new PropertyChangeEvent(this, "enabled", isEnabled(), b); enabled = b; - synchronized(listeners) { - for (PropertyChangeListener l : listeners) { - l.propertyChange(event); - } + for (PropertyChangeListener l : listeners) { + l.propertyChange(event); } } @@ -475,20 +473,16 @@ public class WorkspaceActions { return enabled; } - private Set listeners = new HashSet(); + private List listeners = new CopyOnWriteArrayList(); @Override public void addPropertyChangeListener(PropertyChangeListener listener) { - synchronized(listeners) { - listeners.add(listener); - } + listeners.add(listener); } @Override public void removePropertyChangeListener(PropertyChangeListener listener) { - synchronized(listeners) { - listeners.remove(listener); - } + listeners.remove(listener); } } diff --git a/src/com/gpl/rpg/atcontentstudio/ui/WorldmapCreationWizard.java b/src/com/gpl/rpg/atcontentstudio/ui/WorldmapCreationWizard.java index 399bf9e..c164c3a 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/WorldmapCreationWizard.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/WorldmapCreationWizard.java @@ -7,6 +7,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; import javax.swing.JButton; import javax.swing.JDialog; @@ -144,7 +145,7 @@ public class WorldmapCreationWizard extends JDialog { public void segmentCreated(WorldmapSegment created); } - private List listeners = new ArrayList(); + private List listeners = new CopyOnWriteArrayList(); public void addCreationListener(CreationCompletedListener l) { listeners.add(l); diff --git a/src/com/gpl/rpg/atcontentstudio/ui/WorldmapLabelEditionWizard.java b/src/com/gpl/rpg/atcontentstudio/ui/WorldmapLabelEditionWizard.java index 50bcb09..a8b2807 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/WorldmapLabelEditionWizard.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/WorldmapLabelEditionWizard.java @@ -7,6 +7,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; import javax.swing.JButton; import javax.swing.JDialog; @@ -176,7 +177,7 @@ public class WorldmapLabelEditionWizard extends JDialog { public void labelCreated(WorldmapSegment.NamedArea created); } - private List listeners = new ArrayList(); + private List listeners = new CopyOnWriteArrayList(); public void addCreationListener(CreationCompletedListener l) { listeners.add(l); diff --git a/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/DialogueEditor.java b/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/DialogueEditor.java index 881fcf5..3a2ef62 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/DialogueEditor.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/DialogueEditor.java @@ -12,6 +12,7 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; import javax.swing.DefaultListCellRenderer; import javax.swing.ImageIcon; @@ -752,7 +753,7 @@ public class DialogueEditor extends JSONElementEditor { } } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { @@ -917,7 +918,7 @@ public class DialogueEditor extends JSONElementEditor { } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { @@ -1031,7 +1032,7 @@ public class DialogueEditor extends JSONElementEditor { } } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { diff --git a/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/DroplistEditor.java b/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/DroplistEditor.java index 7e560ec..cc8a7f2 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/DroplistEditor.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/DroplistEditor.java @@ -5,6 +5,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; import javax.swing.DefaultListCellRenderer; import javax.swing.ImageIcon; @@ -196,7 +197,7 @@ public class DroplistEditor extends JSONElementEditor { } } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { diff --git a/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/ItemEditor.java b/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/ItemEditor.java index 6f83972..5706d89 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/ItemEditor.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/ItemEditor.java @@ -5,6 +5,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; import javax.swing.DefaultListCellRenderer; import javax.swing.ImageIcon; @@ -578,7 +579,7 @@ public class ItemEditor extends JSONElementEditor { } } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { @@ -640,7 +641,7 @@ public class ItemEditor extends JSONElementEditor { } } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { @@ -723,7 +724,7 @@ public class ItemEditor extends JSONElementEditor { } } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { diff --git a/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/NPCEditor.java b/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/NPCEditor.java index 85e889d..a98c6ab 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/NPCEditor.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/NPCEditor.java @@ -6,6 +6,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; import javax.swing.DefaultListCellRenderer; import javax.swing.ImageIcon; @@ -397,7 +398,7 @@ public class NPCEditor extends JSONElementEditor { } } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { @@ -459,7 +460,7 @@ public class NPCEditor extends JSONElementEditor { } } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { diff --git a/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/QuestEditor.java b/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/QuestEditor.java index fdce244..2af7cdc 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/QuestEditor.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/QuestEditor.java @@ -6,6 +6,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; import javax.swing.BorderFactory; import javax.swing.ImageIcon; @@ -293,7 +294,7 @@ public class QuestEditor extends JSONElementEditor { if (quest.stages.isEmpty()) quest.stages = null; } - public List listeners = new ArrayList(); + public List listeners = new CopyOnWriteArrayList(); @Override public void addTableModelListener(TableModelListener l) { diff --git a/src/com/gpl/rpg/atcontentstudio/ui/map/TMXMapEditor.java b/src/com/gpl/rpg/atcontentstudio/ui/map/TMXMapEditor.java index d90d97e..923934e 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/map/TMXMapEditor.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/map/TMXMapEditor.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.CopyOnWriteArrayList; import javax.swing.BorderFactory; import javax.swing.ComboBoxModel; @@ -890,7 +891,7 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe return index; } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addTreeModelListener(TreeModelListener l) { @@ -999,7 +1000,7 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe } } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { @@ -1078,7 +1079,7 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe } } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { @@ -1150,7 +1151,7 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe return availableLayers.size(); } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { listeners.add(l); @@ -1206,7 +1207,7 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe } } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { @@ -1251,7 +1252,7 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe return area.spawnGroup.get(index); } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { @@ -1533,7 +1534,7 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe return null; } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { diff --git a/src/com/gpl/rpg/atcontentstudio/ui/sprites/SpritesheetEditor.java b/src/com/gpl/rpg/atcontentstudio/ui/sprites/SpritesheetEditor.java index de92ffa..cf3c80d 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/sprites/SpritesheetEditor.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/sprites/SpritesheetEditor.java @@ -15,6 +15,7 @@ import java.util.Enumeration; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.CopyOnWriteArrayList; import javax.swing.BorderFactory; import javax.swing.DefaultListCellRenderer; @@ -259,7 +260,7 @@ public class SpritesheetEditor extends Editor { } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addTableModelListener(TableModelListener l) { @@ -358,7 +359,7 @@ public class SpritesheetEditor extends Editor { return null; } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addListDataListener(ListDataListener l) { diff --git a/src/com/gpl/rpg/atcontentstudio/ui/tools/ItemsTableView.java b/src/com/gpl/rpg/atcontentstudio/ui/tools/ItemsTableView.java index 1a079d4..32b694c 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/tools/ItemsTableView.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/tools/ItemsTableView.java @@ -2,6 +2,7 @@ package com.gpl.rpg.atcontentstudio.ui.tools; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; import javax.swing.Icon; import javax.swing.ImageIcon; @@ -200,7 +201,7 @@ public class ItemsTableView extends ElementTableView { //not editable. } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addTableModelListener(TableModelListener l) { diff --git a/src/com/gpl/rpg/atcontentstudio/ui/tools/NPCsTableView.java b/src/com/gpl/rpg/atcontentstudio/ui/tools/NPCsTableView.java index 829c2bf..5f4ddf0 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/tools/NPCsTableView.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/tools/NPCsTableView.java @@ -2,6 +2,7 @@ package com.gpl.rpg.atcontentstudio.ui.tools; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; import javax.swing.Icon; import javax.swing.ImageIcon; @@ -157,7 +158,7 @@ public class NPCsTableView extends ElementTableView { //not editable. } - List listeners = new ArrayList(); + List listeners = new CopyOnWriteArrayList(); @Override public void addTableModelListener(TableModelListener l) {