1

我的应用程序的一部分截取了某个窗口的屏幕截图,但在我这样做之前,我想把窗口放在前面。这在我的 Mac 机器上运行良好,但是当我在 Windows XP 上并行测试它时,屏幕截图总是在重叠窗口所在的位置出现灰色区域。似乎总是在我想要在顶部的窗口被转移到顶部时截取屏幕截图。我试过同时使用:

     frame.setVisible(true);
            and
     frame.setAlwaysOnTop(true);

有人对此问题有合理的解决方案吗?

4

2 回答 2

1
  • 您可以为截取屏幕截图的线程添加延迟。

  • 当它获得焦点时,您可以从框架中触发屏幕截图:

    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);
    
  • 你可以两者都做。

于 2009-08-14T21:42:38.867 回答
1

如果您尝试截取w由 Java 绘制的窗口,您可以要求它在

BufferedImage bi = new BufferedImage(
    w.width, w.height, BufferedImage.TYPE_INT_RGB); 
Graphics g = bi.getGraphics();

通过调用windows的paint(g)方法。然后,您可以将 BufferedImage 保存到文件中。如果你抓住一个外部窗口,那么我相信奥斯卡雷耶斯已经给了你所有的答案。

于 2009-08-14T22:30:16.727 回答