Java Swing - Using ProgressMonitorInputStream to show an InputStream reading progress [Updated: Jun 16, 2018, Created: Jun 16, 2018] |
|
||
Examplepublic class ProgressMonitorInputStreamExample { public static void main(String[] args) throws IOException { JFrame frame = createFrame("ProgressMonitorInputStream Example"); JButton button = new JButton("read file"); button.addActionListener(createReadFileListener(frame)); button.setEnabled(true); frame.add(button, BorderLayout.NORTH); frame.setVisible(true); } private static ActionListener createReadFileListener(Component parent) throws IOException { File file = createTestFile(); file.deleteOnExit(); //for progress dialog title UIManager.put("ProgressMonitor.progressText", "Reading a test file"); return (ae) -> { new Thread(() -> { ProgressMonitorInputStream pMonitorInputStream; try (BufferedInputStream bis = new BufferedInputStream( pMonitorInputStream = new ProgressMonitorInputStream( parent, "Reading " + file.getName(), new FileInputStream(file)))) { ProgressMonitor progressMonitor = pMonitorInputStream.getProgressMonitor(); progressMonitor.setMillisToDecideToPopup(100); progressMonitor.setMillisToPopup(100); byte[] buffer = new byte[2048]; while ((bis.read(buffer)) != -1) { System.out.println(new String(buffer)); progressMonitor.setNote(bis.available()/1000+ " more kb to read."); //simulating some processing delay Thread.sleep(2); } } catch (Exception e) { throw new RuntimeException(e); } }).start(); }; } private static File createTestFile() throws IOException { Path testPath = Files.createTempFile("test", ".txt"); String textData = IntStream.range(1, 1000000) .mapToObj(Integer::toString) .collect(Collectors.joining()); Files.write(testPath, textData.getBytes()); return testPath.toFile(); } public static JFrame createFrame(String title) { JFrame frame = new JFrame(title); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(new Dimension(800, 700)); return frame; } } OutputOn clicking 'read file' button: ![]() Example ProjectDependencies and Technologies Used:
|
|
||
|
|||
|
|||
|