繁体   English   中英

Java System.in.read()与事件处理程序?

[英]Java System.in.read() vs Event Handler?

假设我有这样的事情:

 x= (char) System.in.read();

     if(x == 'a') {
        // Do something;
     }

它与以下内容有何不同:

public void handle(KeyEvent event) {
        switch (event.getCode()) {
            case A: // Do something;
            case ENTER: // Do something else;
        }
    }

我的意思是什么时候应该使用第一个,什么时候应该使用第二个? 优缺点都有什么?

两种方法都以两种不同的方式从用户那里获取输入。

首先是从JVM的“标准输入”流中读取字符。 如果您在不重定向标准输入的情况下运行应用程序,则此流很可能来自启动JVM的“控制台窗口”。 控制台/ OS行编辑器将处理控制台窗口上的击键,直到用户键入ENTER。 发生这种情况时,会将一行字符传递到输入流,以供JVM / Java应用程序读取。

第二个是直接处理键盘事件。 但是,这仅在GUI应用程序中有效。 它只会看到直接指向应用程序窗口的键盘事件。


我的意思是什么时候应该使用第一个,什么时候应该使用第二个?

在基于控制台的控制台中使用第一个,您无需在用户按下键的实例上看到字符。

当您具有基于GUI的应用程序并且想要以交互方式从用户那里获取输入时,请使用第二个。

优缺点都有什么?

从上面看,这是不言而喻的。 但是,还有几个其他的“缺点”。

  • 使用System.in方法:

    • System.in流可能来自文件。 如果您需要确定(或尽可能确定)您正在与真实用户对话,请使用System.console() ...并检查您没有得到null
    • 如果要在键入时看到用户的字符,则需要使用第三方库。
  • 使用EventHandler方法:

    • 这在“无头”系统上不起作用。
    • 它在Java方面也很重要。 Java方面需要处理键上/键下事件,回显,行编辑,结束等操作。 如果您要拦截代码中的事件,则很可能是您的代码需要承担繁重的工作。
    • 我认为没有启动窗口就无法使用它。 (否则,最终用户将无法知道他/她正在键入的字符的“输入焦点”在哪里。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM