!747 !actionListener { !awt { m { static JTable tbl; static int delay = 3000; static boolean withVMs = true; p { JFrame frame = new JFrame("Bots Table (developing)"); frame.setBounds(10, 10, 400, 400); tbl = new JTable(); updateBotList(); frame.getContentPane().add(new JScrollPane(tbl)); frame.setVisible(true); installTimer(tbl, runnable { updateBotList(); }, delay); } static new MonoThread update; !include #1001434 // MonoThread static void updateBotList() { update.run(runnable { new L> bots; for (ProgramScan.Program p : quickBotScan()) { if (withVMs || indexOfIgnoreCase(p.helloString, "This is a JavaX VM.") != 0) bots.add(litlist(firstPartOfHelloString(p.helloString), "" + p.port)); } sortByFirstColumn(bots); fillTableWithStrings(tbl, bots, "Hello message", "Port"); }); } }