我正在构建这个弹出式学习新语言应用程序,如果用户发现一个未知单词,他可以简单地按任何键盘键(例如 alt+p),以便弹出该应用程序并允许他插入新单词
为了让 key 可以从任何地方听到,我编写了以下代码
public class IsKeyPressed extends JFrame implements KeyListener {
public IsKeyPressed() {
this.setExtendedState(MAXIMIZED_BOTH);
this.setUndecorated(true);
this.setBackground(new Color(0, 0, 0, 0));
this.addKeyListener(this);
this.setAlwaysOnTop(true);
this.setVisible(true);
while (true) {
this.toFront();
this.requestFocus();
this.repaint();
}
}
public static void main(String[] args) {
new IsKeyPressed();
}
@Override
public void keyPressed(KeyEvent ke) {
//open the pop up application
}
但只有当框架从任务栏聚焦时它才能正常工作 所以基本上它不起作用
知道如何修复吗?谢谢!
最佳答案
but it does only work fine if the frame is focused from taskbar so basically it ّdoesn`t work
any idea how to fix ?
对于核心 Java 来说不是这样,这是肯定的。您询问如何创建一个通用的按键监听器,即使应用程序没有焦点,该监听器也能工作,而这是核心 Java GUI 库自己无法完成的事情,因为该功能需要编码器可以接近操作系统来进行特定于操作系统的调用,而 Java 的构建是为了尽可能与操作系统无关。
因此可能的解决方案包括
- 用 C 语言编写您自己的操作系统例程,并使用 JNI 将它们与您的 Java 程序相结合
- 使用 JNA 编写 Java 操作系统例程
- 或者(我最喜欢的)使用特定于操作系统的工具(例如 Windows 的 Auto-It)来捕获按键并恢复您的程序,然后通过流将其与您的程序相结合。
关于java - 通过按键打开应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38237152/