diff --git a/src/main/java/istlab/KisoJikken/JCompiler.java b/src/main/java/istlab/KisoJikken/JCompiler.java index 347da8d..8b9a507 100644 --- a/src/main/java/istlab/KisoJikken/JCompiler.java +++ b/src/main/java/istlab/KisoJikken/JCompiler.java @@ -47,6 +47,7 @@ // processBuilder.inheritIO(); try { process = processBuilder.start(); + Launcher.allProcs.add(process); con.startBR(process); // BufferedReader reader = new BufferedReader(new // InputStreamReader(process.getInputStream())); diff --git a/src/main/java/istlab/KisoJikken/JExecutor.java b/src/main/java/istlab/KisoJikken/JExecutor.java index b51ecce..e26cbf9 100644 --- a/src/main/java/istlab/KisoJikken/JExecutor.java +++ b/src/main/java/istlab/KisoJikken/JExecutor.java @@ -44,6 +44,7 @@ // processBuilder.inheritIO(); try { process = processBuilder.start(); + Launcher.allProcs.add(process); con.startBR(process); // process.waitFor(); diff --git a/src/main/java/istlab/KisoJikken/JTAConsole.java b/src/main/java/istlab/KisoJikken/JTAConsole.java index da0dd08..71caa66 100644 --- a/src/main/java/istlab/KisoJikken/JTAConsole.java +++ b/src/main/java/istlab/KisoJikken/JTAConsole.java @@ -77,7 +77,7 @@ public void startBR(Process proc) { process = proc; try { - reader = new BufferedReader(new InputStreamReader(proc.getInputStream(),"UTF-8")); + reader = new BufferedReader(new InputStreamReader(proc.getInputStream(), "UTF-8")); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } @@ -153,6 +153,9 @@ process.destroy(); winStack.remove(this); setVisible(false); + if (!process.isAlive()) { + Launcher.allProcs.remove(process); + } } @Override diff --git a/src/main/java/istlab/KisoJikken/Launcher.java b/src/main/java/istlab/KisoJikken/Launcher.java index a02f7c3..5dc6fed 100644 --- a/src/main/java/istlab/KisoJikken/Launcher.java +++ b/src/main/java/istlab/KisoJikken/Launcher.java @@ -21,9 +21,12 @@ import java.nio.file.Paths; import java.security.CodeSource; import java.security.ProtectionDomain; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Enumeration; import java.util.Hashtable; +import javax.swing.JCheckBoxMenuItem; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; @@ -43,9 +46,14 @@ public static String downloadurl = "https://cit.istlab.info/KisoJikkenNWP/target/"; public static Path execPath; // JPanel mainP; + File root; JTree tree; + JCheckBoxMenuItem jcbmi; Hashtable file2editor; + // all generated processes (maybe alive only) + public static ArrayList allProcs = new ArrayList(); + public Launcher(String[] args) { super("Kiso NWP Launcher v" + version); setDefaultCloseOperation(EXIT_ON_CLOSE); @@ -58,14 +66,13 @@ e.printStackTrace(); } - File root; if (args.length > 0) root = new File(args[0]); else root = new File(App.userhome + App.nwpsrc); // Create a TreeModel object to represent our tree of files - FileTreeModel model = new FileTreeModel(root); + FileTreeModel model = new FileTreeModel(root, false); // Create a JTree and tell it to display our model tree = new JTree(); @@ -86,6 +93,7 @@ // Menu JMenuBar menuBar = new JMenuBar(); JMenu menu = new JMenu("App"); + menuBar.add(menu); JMenuItem mi = new JMenuItem("show version"); mi.addActionListener(ae -> JOptionPane.showMessageDialog(this, "Kiso NWP Launcher v" + version)); menu.add(mi); @@ -102,43 +110,90 @@ mi.addActionListener(ae -> openExecPath()); menu.add(mi); + menu = new JMenu("File"); menuBar.add(menu); + + jcbmi = new JCheckBoxMenuItem("exclude class files"); + jcbmi.addItemListener(ae -> reloadFiles() ); + menu.add(jcbmi); + + mi = new JMenuItem("reload folders/files"); + mi.addActionListener(ae -> reloadFiles() ); + menu.add(mi); + + menu = new JMenu("Process"); + menuBar.add(menu); + + mi = new JMenuItem("stop alive"); + mi.addActionListener(ae -> stopProcess(false) ); + menu.add(mi); + + mi = new JMenuItem("stop all"); + mi.addActionListener(ae -> stopProcess(true) ); + menu.add(mi); + setJMenuBar(menuBar); // getContentPane().add(mainP, BorderLayout.WEST); setSize(400, 600); } + public void stopProcess(boolean isAll){ + ArrayList toberemoved = new ArrayList(); + for(Process proc : allProcs){ + if (!isAll){ + if (proc.isAlive()) continue; + } + proc.destroy(); + toberemoved.add(proc); + } + for(Process delproc: toberemoved){ + allProcs.remove(delproc); + Enumeration enu = JTAConsole.winStack.elements(); + while(enu.hasMoreElements()){ + JTAConsole con = enu.nextElement(); + con.windowClosing(null); + con.frame.dispose(); + } + } + } + + public void reloadFiles() { + FileTreeModel model = new FileTreeModel(root, jcbmi.isSelected()); + tree.setModel(model); + } + public void downloadLatest() { // 最初に、ダウンロードサイトから最新版の情報を得る // 更新があれば、ダウンロードし、ファイルを表示する。 StringBuilder sb = new StringBuilder(); - String latestVersion=null; + String latestVersion = null; try { URL url = new URL(downloadurl); InputStream is = url.openConnection().getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line = null; while ((line = reader.readLine()) != null) { - if (latestVersion==null) latestVersion = line.trim(); + if (latestVersion == null) + latestVersion = line.trim(); System.out.println(line); - sb.append(line+"\n"); + sb.append(line + "\n"); } reader.close(); } catch (Exception ex) { } // System.out.println(sb.toString()); -//同じかどうかチェック - System.out.println("["+latestVersion+"]"); - System.out.println("="+execPath.getFileName()+"="); + // 同じかどうかチェック + System.out.println("[" + latestVersion + "]"); + System.out.println("=" + execPath.getFileName() + "="); - if (latestVersion.equals(execPath.getFileName().toString())){ - JOptionPane.showMessageDialog(this, "This is latest version : v"+version); + if (latestVersion.equals(execPath.getFileName().toString())) { + JOptionPane.showMessageDialog(this, "This is latest version : v" + version); } else { - int res = JOptionPane.showConfirmDialog(this, "Download "+latestVersion+"??"); - if (res==JOptionPane.YES_OPTION){ + int res = JOptionPane.showConfirmDialog(this, "Really download new version \n(" + latestVersion + ") ??"); + if (res == JOptionPane.YES_OPTION) { try { - URL url = new URL(downloadurl+"/"+latestVersion); + URL url = new URL(downloadurl + "/" + latestVersion); ReadableByteChannel readableByteChannel = Channels.newChannel(url.openStream()); FileOutputStream fileOutputStream = new FileOutputStream(latestVersion); FileChannel fileChannel = fileOutputStream.getChannel(); @@ -277,9 +332,11 @@ // We specify the root directory when we create the model. protected File root; + boolean isExcludeClassFiles = false; - public FileTreeModel(File root) { + public FileTreeModel(File root, boolean exCls) { this.root = root; + isExcludeClassFiles = exCls; } // The model knows how to return the root object of the tree @@ -292,9 +349,17 @@ return ((File) node).isFile(); } + private File[] getChildFiles(File parent){ + if (isExcludeClassFiles){ + return parent.listFiles(path -> !path.toString().endsWith(".class")); + } else { + return parent.listFiles(); + } + } + // Tell JTree how many children a node has public int getChildCount(Object parent) { - String[] children = ((File) parent).list(); + File[] children = getChildFiles((File) parent); if (children == null) return 0; return children.length; @@ -304,23 +369,26 @@ // Our model returns File objects for all nodes in the tree. The // JTree displays these by calling the File.toString() method. public Object getChild(Object parent, int index) { - String[] children = ((File) parent).list(); + File[] children = getChildFiles((File) parent); + // String[] children = ((File) parent).list(); Arrays.sort(children); if ((children == null) || (index >= children.length)) return null; - return new File((File) parent, children[index]); + // return new File((File) parent, children[index]); + return children[index]; } // Figure out a child's position in its parent node. public int getIndexOfChild(Object parent, Object child) { - String[] children = ((File) parent).list(); + File[] children = getChildFiles((File) parent); + // String[] children = ((File) parent).list(); Arrays.sort(children); if (children == null) return -1; String childname = ((File) child).getName(); // if (childname.startsWith(".")) return -1; for (int i = 0; i < children.length; i++) { - if (childname.equals(children[i])) + if (childname.equals(children[i].getName())) return i; } return -1; diff --git a/src/main/java/istlab/KisoJikken/ScriptRunner.java b/src/main/java/istlab/KisoJikken/ScriptRunner.java index 9083725..87aa15e 100644 --- a/src/main/java/istlab/KisoJikken/ScriptRunner.java +++ b/src/main/java/istlab/KisoJikken/ScriptRunner.java @@ -44,6 +44,7 @@ try { process = processBuilder.start(); + Launcher.allProcs.add(process); con.startBR(process); // BufferedReader reader = new BufferedReader(new