我的应用程序的一部分截取了某个窗口的屏幕截图,但在我这样做之前,我想把窗口放在前面。这在我的 Mac 机器上运行良好,但是当我在 Windows XP 上并行测试它时,屏幕截图总是在重叠窗口所在的位置出现灰色区域。似乎总是在我想要在顶部的窗口被转移到顶部时截取屏幕截图。我试过同时使用:
frame.setVisible(true);
and
frame.setAlwaysOnTop(true);
有人对此问题有合理的解决方案吗?
我的应用程序的一部分截取了某个窗口的屏幕截图,但在我这样做之前,我想把窗口放在前面。这在我的 Mac 机器上运行良好,但是当我在 Windows XP 上并行测试它时,屏幕截图总是在重叠窗口所在的位置出现灰色区域。似乎总是在我想要在顶部的窗口被转移到顶部时截取屏幕截图。我试过同时使用:
frame.setVisible(true);
and
frame.setAlwaysOnTop(true);
有人对此问题有合理的解决方案吗?
您可以为截取屏幕截图的线程添加延迟。
当它获得焦点时,您可以从框架中触发屏幕截图:
class ScreenshotShooter implements FocusListener {
public void focusGained( FocusEvent e ) {
// smile.....
// you may add a sec of delay here just be be sure.
}
public void focusLost( FocusEvent e ) {}
}
FocusListener focusListener = new ScreenshotShooter();
frame.addFocusListener( focusListener );
frame.setVisible( true ); // should autofire
frame.remoe( focusListener);
你可以两者都做。
如果您尝试截取w
由 Java 绘制的窗口,您可以要求它在
BufferedImage bi = new BufferedImage(
w.width, w.height, BufferedImage.TYPE_INT_RGB);
Graphics g = bi.getGraphics();
通过调用windows的paint(g)
方法。然后,您可以将 BufferedImage 保存到文件中。如果你抓住一个外部窗口,那么我相信奥斯卡雷耶斯已经给了你所有的答案。