У меня проблема при создании JProgressBar
, который установлен в неопределенный. Следующий код моя реализация JProgressBar
и называется/строится из другого класса:JProgressBar неопределенная нить
public class Progress implements Runnable
{
private JFrame frameProgress;
private JProgressBar progressBar;
public Progress(String title, String message)
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e)
{
GlobalVariables.LOGGING_logger.error("Error instatiating progress bar.",
e);
}
UIManager.put("ProgressBar.selectionForeground", Color.black);
UIManager.put("ProgressBar.selectionBackground", Color.black);
this.frameProgress = new JFrame(title);
this.frameProgress.setIconImage(GlobalVariables.GUI_icon.getImage());
this.frameProgress.setSize(300, 60);
this.frameProgress.setLocation(16, 16);
this.progressBar = new JProgressBar();
this.progressBar.setStringPainted(true);
this.progressBar.setString(message);
this.progressBar.setIndeterminate(true);
this.frameProgress.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.frameProgress.add(this.progressBar);
this.frameProgress.setResizable(false);
this.frameProgress.setVisible(true);
}
public void start()
{
new Thread(this).start();
}
public void close()
{
this.frameProgress.dispose();
this.frameProgress = null;
this.progressBar = null;
}
@Override
public void run()
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
// do nothing, because progress bar is indeterminate
}
});
}
}
Вызывающий этого JProgressBar является следующий фрагмент кода:
Progress p = new Progress("bla", "blub");
p.start();
boolean successfull = xmlWriter.writeCommonSettingsFromGUI(this);
p.close();
А теперь я хочу, в то время как xmlWriter.writeCommonSettingsFromGUI(this);
делает что-то, что отображается JProgressBar
и работает во время работы алгоритма.
Как я могу это достичь? Я не так много знаю о потоковом и обыске на многих других форумах, но я не нашел ответа на свой вопрос.
Пожалуйста, помогите мне, и спасибо заранее;)
EDIT: Прогресс JFrame открывает без содержания для этого времени, алгоритм работает.
Опишите, что не работает над вашим текущим кодом? –
Индикатор выполнения не отображается, и я получаю исключение: Исключение в потоке «AWT-EventQueue-0» java.lang.NullPointerException \t на de.Progress $ 1.run (Прогресс.Java: 63) \t на java.awt.event.InvocationEvent.dispatch (InvocationEvent.java:251) \t на java.awt.EventQueue.dispatchEventImpl (EventQueue.java:727) \t в java.awt.EventQueue.access $ 200 (EventQueue.java:103)) ... –
Хорошо ... ошибок больше нет ... но: если я начну поток, он откроет JRrame прогресса, но в нем нет содержимого (нет JProgressBar) ... –