В настоящее время у меня есть java-программа с графическим интерфейсом Swing, которая позволяет пользователю выбирать различные файлы (xsl-fo и xml) и создавать PDF-файлы с использованием Render X. Некоторое время я пытался заставить всплывающее окно 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, которая находится в JFrame, а экземпляр основного фрейма создается в основном методе и заворачивается в метод вызова позже.
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-свинге, так что полегче! Спасибо
while
, это должно вам помочь, также обновите свой PercentageFrame сProcessThreader
. - person alex2410   schedule 06.12.2013