在我的Swing应用程序中,我正在使用自定义模块来录制屏幕转换。
然而,我有点挂断电子时间强迫录音停止。现在,我检查用户是否仍希望记录(意味着他们没有点击“停止”按钮),如果应用程序仍处于打开状态(关闭应用程序会导致录制正常停止)。
问题是如果应用程序被推到其他应用程序后面或者最小化,录制将继续,导致录制'垃圾'。当应用程序不再“在屏幕顶部”时,我需要停止录制。由于其他对话框和事物的出现,使用应用程序的焦点似乎不起作用。
建议?
答案 0 :(得分:6)
您可能想尝试添加一个WindowListener并覆盖windowDeactivated()事件,当事件不再是根据操作系统的“活动窗口”时,应该调用该事件。
更新:
如果您认真确保您的孩子对话框和窗口归您的应用程序所有(确保您将应用程序框架作为所有者传递),那么您可以让WindowListener执行以下操作:
public void windowDeactivated(WindowEvent e) {
if(e.getOppositeWindow() == null){
// will be null when another application window gets activated, stop recording
}
for(Window w : appFrame.getOwnedWindows()){
if(w.equals(e.getOppositeWindow())){
// one of the windows owned by the frame is active, don't stop recording
}
}
}
然后,您将能够确定窗口焦点是否完全离开了您的应用程序,或者焦点是否刚刚更改为其他子窗口/对话框。