diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index ace0faa97..0125feb95 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -198,6 +198,8 @@ public class Editor extends JFrame implements RunnerListener { private Runnable exportAppHandler; private Runnable timeoutUploadHandler; + private Map internalToolCache = new HashMap(); + public Editor(Base ibase, File file, int[] storedLocation, int[] defaultLocation, Platform platform) throws Exception { super("Arduino"); this.base = ibase; @@ -963,8 +965,7 @@ public class Editor extends JFrame implements RunnerListener { JMenuItem createToolMenuItem(String className) { try { - Class toolClass = Class.forName(className); - final Tool tool = (Tool) toolClass.newInstance(); + final Tool tool = getOrCreateToolInstance(className); JMenuItem item = new JMenuItem(tool.getMenuTitle()); @@ -983,6 +984,20 @@ public class Editor extends JFrame implements RunnerListener { } } + private Tool getOrCreateToolInstance(String className) { + Tool internalTool = internalToolCache.get(className); + if (internalTool == null) { + try { + Class toolClass = Class.forName(className); + internalTool = (Tool) toolClass.newInstance(); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + internalToolCache.put(className, internalTool); + } + return internalTool; + } private void addInternalTools(JMenu menu) { JMenuItem item;