在通过按下部署到 a 中的按钮执行的操作(即方法)中JFrame
,我想隐藏 java 应用程序,然后获取屏幕截图。最后,一旦截取屏幕截图,我需要使其JFrame
可见。
方法如下:
public void myButtonPressedAction(){
//Hiding the JFrame
this.setVisible(false);
//Now I use Robot to get a screenshot using another method
//not reported for simplicity
myMethodToGetScreenshot();
//Making the JFrame visible
this.setVisible(true);
}
发生的情况是,一旦可见性设置为 false,应用程序开始变得不可见,我立即得到屏幕截图:不幸的是,屏幕截图还捕获了JFrame
淡出时(即,它将变得不可见,isVisible
方法返回true
,但是JFrame
不是完全不可见的)。
一种可能的解决方案是插入一个计时器,以在对 的调用setVisible(false)
和对的调用之间设置延迟myMethodToGetScreenshot()
。但是,假设系统很忙,延迟可能会被低估;相反,较大的延迟会使我的应用程序变慢!
我怎样才能获得JFrame
完全淡出的确切时间,即它真的不可见?
编辑
这在构造函数中初始化:
String myPath= ...;//here I have a String that represent a path to a folder.
JPEGImageWriteParam JPEG_PARAMS_BEST_QUALITY = new JPEGImageWriteParam(null);
JPEG_PARAMS_BEST_QUALITY.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
JPEG_PARAMS_BEST_QUALITY.setCompressionQuality(1f);
这是代码 myMethodToGetScreenshot()
:
public void myMethodToGetScreenshot(){
BufferedImage capture = new Robot().createScreenCapture(screenArea);
ImageWriter writer = writerService.getWriter();
writer.setOutput(new FileImageOutputStream(new File(myPath+"screenshot.jpg")));
writer.write(null, new IIOImage(capture, null, null), JPEG_PARAMS_BEST_QUALITY);
}
这是我得到的截图。你可以看到 JFrame 淡出...