static int jInjectionsTable_updateInterval = 3000; static JTable jInjectionsTable() { final JTable tbl = sexyTable(); tablePopupMenu(tbl, voidfunc(JPopupMenu menu, final int row) { menu.add(jmenuItem("Kill VM", r { S port = str(getTableLineAsMap(tbl, row).get("VM")); if (isInteger(port)) killVM(parseInt(port)); })); }); awtCalcRegularly(tbl, jInjectionsTable_updateInterval, 0, r { long time = sysNow(); new L l; for (DialogIO vm : talkToAllVMs()) { pcall { int vmPort = vm.getPort(); S x = vm.ask("get injections"); //print("VM " + vmPort + " injections: " + x); L injections = cast safeUnstructure(x); for (O inj : injections) { S progID = formatSnippetID((S) get(inj, "progID")); l.add(litorderedmap( "Program name", getSnippetTitle(progID), "Program ID", progID, "VM", vmPort, "Injection ID", get(inj, "injectionID"), "More info", (boolean) get(inj, "mainDone") ? "main done" : "main running")); } } vm.close(); } done2(time, "Scanned " + n(l, "VMs")); dataToTable(tbl, l); }); ret tbl; }