Для любителей приключений это можно сделать одной командой:
mv .git/refs/tags/OLD .git/refs/tags/NEW
В следующем ссылка можно найти класс MessageConsole, который кто-то упомянул. Я реализовал программное обеспечение и использовал это решение, и оно работает идеально подходящее для меня. Я использовал средство проектирования Netbeans, таким образом, код относительно общего вида JTextPane является немного громоздким, таким образом, я не собираюсь помещать его сюда.
JTextPane jTextPane = new JTextPane();
MessageConsole console = new MessageConsole(jTextPane);
/*
This parameters are optional, but if you are looking for a solution with JTextPane it is because you need them, at least color.
*/
console.redirectErr(Color.RED, null);
console.redirectOut();
//some event
private void jButton1ActionPerformed(ActionEvent evt) {
/*
In this event I execute a function of my business.
I put it in a thread so that it does not block the graphical interface.
There are many calls to System.out.println() and System.err.println()
*/
BusinessClass bc = new BusinessClass();
Runnable runnable = () -> {
bc.someBusinessFn();
};
thread = new Thread(runnable);
thread.start();
}
//My main method
public static void main(String args[]) {
/* Create and display the GUI */
EventQueue.invokeLater(() -> {
new MyJFrame().setVisible(true);
});
}
Редактирование
Извините, я не понял, что в ответе, подобном этому, они поместили ссылку на класс MessageConsole. Я не видел его, и я также хотел показать свое решение.