【问题标题】:create a thread that will write each character typed using keyboard创建一个线程,该线程将写入使用键盘键入的每个字符
【发布时间】:2013-03-26 00:43:16
【问题描述】:

我正在尝试创建一个 thread,它将创建一个 text file 并将使用键侦听器写入计算机上键入的每个字符,但我不知道如何附加创建的包含用户将输入的下一个字符的文件.....可能我让每个人都感到困惑,但我只想存储用户将输入的每个字符(通过键盘)

就像每当我执行我的应用程序时,它都会创建一个文件并开始将 keychar 写入该文件。

【问题讨论】:

  • 你目前写的怎么样?
  • write each and every character typed on computer - Java 不支持这个。您只能访问当前具有焦点的 Java 应用程序的 KeyEvents。
  • 请粘贴您可能拥有的示例代码。我们可以看看它并根据它提出解决方案。
  • 我认为在 Java 中没有办法以这种方式写入文件。粗略的解决方案可以是,您可以从键盘缓冲(File-Buffered)字符并在一段时间后将其刷新到文件
  • @ajduke 当然可以追加文件,只要正确打开即可

标签: java multithreading swing keyboard keylistener


【解决方案1】:

这个问题有点不清楚。首先,如果您想存储在系统上键入的每个字符,那么这是一项艰巨的任务(稍后解释)。如果您想在顶部的 Java 窗口中注册击键,那么您可以通过不关闭文件并附加到相同的 writer 来实现这一点。

因此它将继续附加到它。但请确保,所有密钥处理都发生在 SwingUtilities.invokeLater() 内部。

现在,如果要完成所有任务,它适用于任何窗口。然后它很乏味,首先因为您需要操作系统支持它。您必须使用JNI 或最好使用JNA。对于 Windows,this 会有所帮助。我不清楚使用哪个合适的功能,但您会在这里找到所有需要的功能(尽管您需要先查看 win32 api)

private final User32 lib = = User32.INSTANCE;
//lib.appropriateMethod

同样适用于 Mac,使用 Carbon 框架(已弃用)或 Cocoa

这就是痛苦,如果你用 Java 来做的话

【讨论】:

  • Jatin 正如你所说,我必须创建一个 User32 实例,但我认为它将提供每一个步骤,例如复制一个文件或执行某些操作
  • 很抱歉,我没有收到您的声明。你能详细说明一下吗
  • 我是说 user32 反映了用户执行的所有操作还是只代表键盘实例
  • 它具有必要的功能,您可以使用这些功能获得击键。但我建议您尝试在 Visual ++ 或 C# 中执行此操作。它会以较少的努力在四分之一的时间内完成。 JNA是一个很大的痛苦。从这里到那里的一点点只会让你的 JVM 崩溃。你是在 JVM 上做的,我建议彻底阅读 JNA 和平台的文档。 PS:我只是浪费了一个月的时间,因此经验:)
  • thanx jatin 我在 vb 中做过这件事,但我想让该应用程序运行直到用户关闭操作系统
猜你喜欢
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-02
  • 1970-01-01
  • 2021-12-18
  • 2013-11-12
  • 1970-01-01
相关资源
最近更新 更多