如何编写模仿sbt的Java应用程序';正在更改控制台屏幕中的文本输出(在解析依赖项时)?
启动如何编写模仿sbt的Java应用程序';正在更改控制台屏幕中的文本输出(在解析依赖项时)?,java,console,sbt,Java,Console,Sbt,启动sbt时,以下行与[info]解析的部分保持在同一行,而org.fusesource.jansi#jansi;1.4…零件不断更改,显示正在解析的库 [info] Resolving org.fusesource.jansi#jansi;1.4 ... 我的问题是: 这叫什么 如何编写一个Java程序来实现这种效果 我不明白有什么困难。据我所知,它没有具体的名字。至于实现这一目标——确实非常简单。您有一个文本字符串模板:解析%1$s…。-然后使用字符串。使用不同的参数格式化,并将结果设置到
sbt
时,以下行与[info]解析的部分保持在同一行,而org.fusesource.jansi#jansi;1.4…
零件不断更改,显示正在解析的库
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
我的问题是:
这叫什么李>
如何编写一个Java程序来实现这种效果
我不明白有什么困难。据我所知,它没有具体的名字。至于实现这一目标——确实非常简单。您有一个文本字符串模板:解析%1$s…。
-然后使用字符串。使用不同的参数格式化
,并将结果设置到文本字段中。这是在sbt
中完成的,在写入更新的值之前,使用转义序列擦除以前的输出。查看trait的实现以了解详细信息
下面是这项技术的一个示例。Windows上需要该库:
import org.fusesource.jansi.AnsiConsole;
public class Main {
public static void main(String[] args) throws InterruptedException {
AnsiConsole.systemInstall();
for (int i = 0; i < 100; i++) {
System.out.print("Hello, world " + i + "% complete\n");
Thread.sleep(200);
System.out.print("\u001B[1A\u001B[2K");
}
}
}
import org.fusesource.jansi.AnsiConsole;
公共班机{
公共静态void main(字符串[]args)引发InterruptedException{
AnsiConsole.systemInstall();
对于(int i=0;i<100;i++){
System.out.print(“你好,世界”+i+%complete\n”);
睡眠(200);
系统输出打印(“\u001B[1A\u001B[2K”);
}
}
}
我觉得很难理解的是,文本是在适当的位置更改的。它不是以通常的方式在屏幕上逐行打印出来的。:)你也知道Mac/Linux的方式吗?我运行了它,输出仍然是“Hello,world 0%完成Hello,world 1%完成Hello,world 2%完成Hello,world 3%完成”我发现了原因!奇怪的是,如果我在eclipse中执行该程序,它仍然是逐行显示的,但是如果我直接在命令行上执行它,这就是所需的行为。