gpt4 book ai didi

java - 运行使用Gradle中的java.io.Console API的应用程序

转载 作者:行者123 更新时间:2023-12-03 03:26:16 33 4
gpt4 key购买 nike

考虑一下我有一个使用java.io.Console API或其他任何可操纵终端状态的API(例如: net.rubygrapefruit:native-platform )的Java(或Kotlin,没关系)应用程序:

System.out.println(format("Console is %s.", System.console()));

final Terminals terminals = Native.get(Terminals.class);
final Output out = Stdout;
if (terminals.isTerminal(out)) {
final TerminalOutput stdout = terminals.getTerminal(out);
stdout.bold();
System.out.println("bold text");
stdout.foreground(Color.Magenta);
System.out.println("Magenta");
stdout.reset();

final Prompter prompter = new Prompter(terminals);
prompter.askYesNo("Prompt", true);
prompter.enterText("Text", "default text");
prompter.enterPassword("Password");
prompter.select("Select", asList("foo", "bar", "baz"), 1);
} else {
System.out.println(format("%s is not a terminal.", out));
}

上面的代码在由 Maven Exec plug-in启动时可以很好地运行,但是使用Gradle(因为Gradle试图使 自己的输出看起来很漂亮,并且带有所有铃铛,哨子和进度条),因此代码仅打印出来:

$ gradle --console=plain run
> Task :compileJava UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE

> Task :run
Console is null.
Stdout is not a terminal.

BUILD SUCCESSFUL in 0s
2 actionable tasks: 1 executed, 1 up-to-date

按照 herehere所述配置 run任务:

private val run: JavaExec by tasks
run.apply {
standardInput = System.`in`
standardOutput = System.out
errorOutput = System.err
}

或按照建议的 here确实将 --no-daemon添加到Gradle的命令行参数中( System.in仍然是 java.io.PipedInputStream的实例,而 System.outSystem.errorg.gradle.internal.io.LinePerThreadBufferingOutputStream的实例)。

是否可以使Gradle停止与终端困惑,并允许正在运行的应用程序访问它?

最佳答案

您可能错误地分配了它们,因为这两个都应该是ByteArrayOutputStream。并且甚至可能甚至不应该在Gradle中分配它们(默认值的分配是多余的)。如果不应该使用Exec,请使用java -jar fileName并执行JavaExec

关于java - 运行使用Gradle中的java.io.Console API的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56666927/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com