java - 尝试使用 KeyboardFocusManager 查找当前聚焦的窗口总是会导致错误消息
问题描述
所以我试图使用 KeyboardFocusManager 获取当前聚焦的窗口,我做了两种方法来尝试实现这一点:
public static void getWindowName() {
String WindowName = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow().toString();
System.out.println("Currently opened window: "+WindowName);
}
这导致Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.awt.Window.toString()" because the return value of "java.awt.KeyboardFocusManager.getFocusedWindow()" is null
和
public static Window getActiveWindow() {
return KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow();
}
使用 调用此方法时System.out.println(getActiveWindow());
,null 会打印到控制台。在执行程序时,我总是打开并专注于 IntelliJ,我什至尝试专注于另一个程序,任务管理器,同样的结果。这也发生在你身上吗?我能做些什么来解决这个问题,或者还有其他更好和更简单的方法来获取当前在 java 中的焦点窗口吗?我在 Windows 10 上使用 java 15.0.2
解决方案
正如java doc所说,“如果焦点窗口不是调用线程上下文的成员,则getFocusedWindow()返回null”那么当您从另一个线程调用它时可能会发生这种情况。因此,为了确保 getFocusedWindow() 没问题,请尝试以编程方式进行焦点:
some_focusable_component.requestFocus();
System.out.println("Currently opened window: "+KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow().toString() );
推荐阅读
- java - JPQL 查询导致多次往返数据库甚至 EAGER 和 JOIN FETCH
- azure-pipelines - CI 构建未触发?
- django - 值列表的 Django 表单
- kubernetes - Kafka 状态存储备用任务在变为活动状态时需要很长时间
- environment-variables - 如何从 Chapel 程序中读取环境变量?
- generics - Cloning Classes i C# (Unity),这两个代码片段有简写吗?
- git - VS 2019 的 Git 问题无法锁定 ref 错误不会消失
- c - 不完全理解使用 void*/char* 引用和 int + 指针运算的非常小的 C 程序的输出
- sql-server - 带有嵌套子句的 SQL 语句查询
- discord.js - 如何使用 discord.js 在嵌入中提及用户角色