【发布时间】:2013-12-06 15:39:16
【问题描述】:
我目前有一个带有 swing gui 的 java 程序,它允许用户选择各种文件(xsl-fo 和 xml)并使用 Render X 生成 PDF。我尝试了一段时间让一个弹出的 JFrame 在按钮时出现被按下,然后会显示一个进度条或标签以让用户了解进度。但是,当实例化一个新框架时,它会显示为黑色,或者没有组件,然后在进程完成后显示。
private void RunButtonActionPerformed(java.awt.event.ActionEvent evt) {
ExecutorService executor = Executors.newFixedThreadPool(8);
//for reach file to process)
for (int i = 0; i < count; i++) {
Runnable worker = new ProcessThreader(conf, i);
executor.execute(worker);
}
executor.shutdown();
JFrame PercentageFrame = new JFrame();
PercentageFrame.setVisible(true);
PercentageFrame.setSize(200, 200);
PercentageFrame.repaint();
while (!executor.isTerminated()) {
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
NarrowOptionPane.errorMessage("Interrupted: ", ex.getMessage());
}
}
System.out.println("Complete");
}
运行按钮位于一个JPanel中,该JPanel位于一个JFrame中,Main Frame在main方法中实例化,并包装在invoke later方法中
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new MainFrame("PDF Producer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setSize(710, 530);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
}
});
}
我对线程/执行器和 java swing 还很陌生,所以放轻松!谢谢
【问题讨论】:
-
删除
while循环它必须对您有所帮助,还可以从ProcessThreader更新您的 PercentageFrame。
标签: java swing executorservice