У меня есть несколько инструментов командной строки C / C ++, которые я упаковываю с помощью Java.Swing как GUI. Инструменты командной строки могут занять минуты или часы. Прогресс бар кажется хорошей идеей, чтобы держать пользователей в здравом уме. Я также думаю, что было бы неплохо обернуть графический интерфейс для индикатора выполнения, а не просто использовать систему. Но как?
Я думаю, что инструменты командной строки могут записывать проценты в stderr, и я могу как-то читать их в Java. Не совсем уверен, какой будет механика для этого. Я также не ясно, на асинхронном дисплее (узнал немного о invokeLater ()). Новичок в Java, и буду признателен за общие предложения. Спасибо.
--- обновление ---
Спасибо всем за ваши предложения. Вот результирующий код.
private void redirectSystemStreams() {
OutputStream out_stderr = new OutputStream() {
@Override
public void write(final int b) throws IOException {
update(String.valueOf((char) b));
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
update(new String(b, off, len));
}
@Override
public void write(byte[] b) throws IOException {
write(b, 0, b.length);
}
};
System.setErr(new PrintStream(out_stderr, true));
}
private void update(final String inputText) {
int value = 20; //parse inputText; make sure your executable calls fflush(stderr) after each fprintf().
jProgressBar.setValue(value);
/* Also one can redirect to a textpane
SwingUtilities.invokeLater(new Runnable() {
public void run() {
//update jTextPane with inputText
}
});
*/
}