我需要在我的屏幕上截取一个区域的屏幕截图,以便在Java中使用"Robot“。但是,如果用户将窗口放置在该区域,则窗口将显示在屏幕截图上,而不是背景上。
为了解决这个问题,我放了一个:
myframe.setVisible(false);但当我看屏幕截图时,窗口就会出现在上面。我认为这是因为窗口没有足够的时间消失,或者因为屏幕的渲染还没有更新,所以我尝试了不同的方法,比如使用:
repaint();或者通过将一个
try{}finally{}块中的操作以确保try块中的操作已完成。但这些解决方案都不起作用。在我看来,这些都是其他的方式,但它们在全局上看起来很糟糕,因为它们使用函数来等待。
那么我的问题有没有好的解决方案呢?
发布于 2016-08-09 19:10:24
使用SwingUtilities.invokeLater()截取实际的屏幕截图。不是100%确定,但我认为在程序流回到事件调度循环之前,myframe.setVisible(false);不会变得有效。
编辑:代替
useRobotToMakeScreenshot();写
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
useRobotToMakeScreenshot();
}
}(当然,您必须将useRobotToMakeScreenshot()替换为执行截图操作的方法的实际调用)
https://stackoverflow.com/questions/38849026
复制相似问题