static int jInjectionsTable_updateInterval = 3000; static JTable jInjectionsTable() { final JTable tbl = sexyTable(); tablePopupMenu(tbl, voidfunc(JPopupMenu menu, final Int row) { final int port = parseIntOpt(str(getTableLineAsMap(tbl, row).get("VM"))); if (port != 0) { addMenuItem(menu, "Kill VM", r-thread { killVM(port) }); addMenuItem(menu, "Restart Program", r-thread { restartVM(port) }); addMenuItem(menu, "Show VM Output", r-thread { thread "Show VM Output" { showText("Output of VM " + port, unquote(sendToLocalBot(port, "get output"))); } }); addMenuItem(menu, "Hide VM", r-thread { send(port, "hidden vm yes") }); addMenuItem(menu, "Un-Hide VM / Show Console", r-thread { send(port, "show console"); send(port, "hidden vm no") }); addMenuItem(menu, "Dump heap...", r { inputFilePath("Dump heap to where?", new File(javaxCachesDir(), "heap.bin"), voidfunc(File f) { pcall-messagebox { assertOK(send(port, "dump heap to *", f2s(f))); infoBox("Heap dumped to " + fileNamePlusMSize(f)); if (confirmOKCancel("Start jhat (heap analysis server running on localhost:7000)?")) { nohupJavax("#1007494 " + f2s(f)); infoBox("Tried to start jhat."); } } }); }); addMenuItem(menu, "Garbage Collect", r-thread { send(port, "gc") }); } }); awtCalcRegularly(tbl, jInjectionsTable_updateInterval, 0, r { dataToTable(tbl, computerInjectionsData()); }); ret tbl; }