我有使用 ProgressBar 的主文件。 在主文件中,我将 ProgressBar 称为
ProgressBar pbFrame = new ProgressBar();
pbFrame.setVisible(true);
我在调用可执行文件“calculate.exe”后调用ProgressBar以显示calculate.exe现在正在工作。但是当“calculate.exe”完成时,ProgressBar 将打开。如何让“calculate.exe”和ProgressBar并行执行?我听说过 SwingWorker,但我完全不明白如何在我的应用程序中使用它。
我的进度条文件:
public class ProgressBar extends JFrame {
static private int BOR = 10;
private String filename;
public ProgressBar() {
super("Calculating progress");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setBorder(BorderFactory.createEmptyBorder(BOR, BOR, BOR, BOR));
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(new JLabel("Calculating..."));
panel.add(Box.createVerticalGlue());
JProgressBar progressBar1 = new JProgressBar();
progressBar1.setIndeterminate(true);
panel.add(progressBar1);
panel.add(Box.createVerticalGlue());
JPanel buttonsPanel = new JPanel();
buttonsPanel.setLayout(new BoxLayout(buttonsPanel, BoxLayout.Y_AXIS));
buttonsPanel.add(Box.createVerticalGlue());
JButton quitButton = new JButton("OK!");
quitButton.setHorizontalAlignment(JButton.CENTER);
quitButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
dispose();
}
});
panel.add(quitButton);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(panel, BorderLayout.CENTER);
setPreferredSize(new Dimension(200, 110));
setLocationRelativeTo(null);
pack();
}
}
提前致谢!
最佳答案
您可以使用执行器进行后台进程。在这种情况下,您的进度条将在 EDT 中工作,而您的calculate.exe 将在另一个线程中工作。试试这个代码:
ProgressBar pbFrame = new ProgressBar();
pbFrame.setVisible(true);
Executors.newSingleThreadExecutor().execute(new Runnable() {
@Override
public void run() {
// run background process
}
});
关于Java - 计算后打开的进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19538040/