22 package org.matsim.run.gui;
24 import java.awt.Dimension;
25 import java.awt.Toolkit;
26 import java.io.FileInputStream;
27 import java.io.IOException;
28 import java.nio.channels.FileChannel;
30 import javax.swing.GroupLayout;
31 import javax.swing.GroupLayout.Alignment;
32 import javax.swing.JDialog;
33 import javax.swing.JProgressBar;
34 import javax.swing.SwingUtilities;
36 import org.apache.logging.log4j.LogManager;
37 import org.apache.logging.log4j.Logger;
45 class AsyncFileInputProgressDialog
extends JDialog {
47 private final static Logger log = LogManager.getLogger(AsyncFileInputProgressDialog.class);
49 private static final long serialVersionUID = 1L;
51 final JProgressBar progressbar;
53 public AsyncFileInputProgressDialog() {
54 this(
"Operation in Progress…");
57 public AsyncFileInputProgressDialog(
final String title) {
59 progressbar =
new JProgressBar(0, 1000);
60 GroupLayout groupLayout =
new GroupLayout(getContentPane());
61 groupLayout.setHorizontalGroup(groupLayout.createParallelGroup(Alignment.LEADING)
62 .addGroup(groupLayout.createSequentialGroup()
64 .addComponent(progressbar, GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
66 groupLayout.setVerticalGroup(groupLayout.createParallelGroup(Alignment.LEADING)
67 .addGroup(groupLayout.createSequentialGroup()
69 .addComponent(progressbar)
71 getContentPane().setLayout(groupLayout);
74 this.setResizable(
false);
75 this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
79 Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
80 int w = this.getSize().width;
81 int h = this.getSize().height;
82 int x = (dim.width - w) / 2;
83 int y = (dim.height - h) / 2;
84 this.setLocation(x, y);
86 this.setVisible(
true);
90 public void observeProgress(FileInputStream fis) {
91 Thread t =
new Thread(() -> {
92 FileChannel
ch = fis.getChannel();
95 long size = ch.size();
96 long pos = ch.position();
97 final int progress = (int)((((
double)pos) / ((
double)size)) * 1000.0);
98 SwingUtilities.invokeLater(() -> progressbar.setValue(progress));
100 }
catch (InterruptedException | IOException e) {
101 log.error(e.getMessage(), e);
104 },
"ProgressObserver");