微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么换行符 (\n) 的行为与在 Raspbian CLI 上按 Enter 不同

如何解决为什么换行符 (\n) 的行为与在 Raspbian CLI 上按 Enter 不同

我制作了一个应用程序,它基本上可以读取数据并使用 system.out.print 在 raspbian 命令行界面 (CLI) 上打印出来。使用上述方法在 CLI 上打印文本适用于打印文本。

在打印文本后,我希望它的行为也像按下 Enter 按钮(提交数据)。假设 CLI 提示您输入一个值,应用程序打印数据,然后我希望应用程序的行为就像用户按下 Enter 键一样。

该应用程序是一个守护进程,用于在 CLI 中打印来自外部设备的数据。它可以并且确实随时打印此数据,这是有意的。不希望将数据发送到特定应用程序或一组应用程序,因为命令提示的应用程序可以每隔 x 时间交换一次。使用换行命令,光标会移动到下一行,但不会像用户按下键盘的 Enter 按钮一样。

我尝试使用 \n 确实将光标移动到下一行,但它不提交数据。最后,我希望自动输入数据,而无需用户手动按下输入按钮。

在那之后,我尝试了 awt.robot 类,但这不起作用,因为它抛出了一个无头异常,在谷歌搜索之后我相信它与不会在 Raspbian 上安装和使用的 GUI 或功能有关。

我还发现有人提到了 JNA 和 JNI 库,但我找不到任何示例(至少不适用于 linux 设备)来模拟用户按 Enter 键。

这是一个更具体的例子。 CLI 提示

Weight: 0.233

守护进程打印 0.233。因此 CLI 将如下所示:

Weight: 0.233
_ (representing cursor).

然后应用程序必须表现得就像用户按下 Enter 键一样。使用换行符只会移动光标,不会像用户按下回车键一样:

public static void main(String[] args) {
  while(true) {
    //this moves the cursor to the next line and doesn't enter the line in a prompt.
    System.out.println("abc");
    //have to time that it goes into a prompt. I have a startup login prompt which I can test it with.
    //or whatever suits your needs
    Thread.sleep(20000);
  }
}

最小/最简单的可重现示例:

{{1}}

我使用的是 java 8,Raspbian 版本是 8,树莓版本是 3。

希望有人知道该做什么或我错过了什么。欢迎任何帮助。

解决方法

经过多次试验后,我发现这正是当今 TTY 解释 /n 的方式。我有一个较旧的 Linux 安装,它将 /n 模拟为键盘按下,但在该 raspbian 版本中不会发生这种情况。

所以基本上我必须像键盘一样直接写入正确的 IO 通道。您无法模拟键盘输入直接按到终端。只能直接写入正确的 IO 通道或使用键盘模拟器。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?