Есть задача: с помощью команд System.out.println и System.err.println вывести текст в красной рамке. Типа вот так:
*******
*текст*
*******
Но при выводе в IDEA всё время вылетает то текст до рамки, то после, то иначе, но не по заданию. В Eclipse видел, что работает. Понимаю, что в потоках проблема, а решить не получается.
System.err.print("*******\n");
System.err.print("|");
System.out.print("text");
System.err.print("|");
System.err.print("*******\n");
Попробуйте так (очищать буфер после каждого вывода):
print(System.err, "*******\n");
print(System.err,"|");
print(System.out,"text");
print(System.err,"|");
print(System.err,"*******\n");
private void print(PrintStream ps, String output) {
ps.print(output);
ps.flush();
}
Дело в том, что System.out.print буферизирует данные для вывода, в отличие от System.err.print.
Что это значит ?
Например, вы печатаете используя System.out.println. Затем производите какие-то операции, затем опять печатаете. System.out.println произведет печать всех элементов сразу, а не по очередно.
System.err.print мгновенно выводит элементы на печать, не буферизируя данные.
Решили задачу так:
public static void main(String[] args) {
try {
System.err.print("**********\n| ");
System.err.flush();
Thread.sleep(50);
System.out.print("text");
System.out.flush();
Thread.sleep(50);
System.err.print(" |\n**********");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей