Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 屏幕截图问题-不包括自己的应用程序。从截图_Java_Swing_Screenshot - Fatal编程技术网

Java 屏幕截图问题-不包括自己的应用程序。从截图

Java 屏幕截图问题-不包括自己的应用程序。从截图,java,swing,screenshot,Java,Swing,Screenshot,我有一个小问题,我真的不知道如何解决,基本上我想采取截图(使用“机器人”类)我的桌面,不包括实际的程序GUI组件。最初我认为可以通过临时隐藏组件来实现,但每次制作新的屏幕截图时,组件都会包含在图像中 这是获取屏幕截图的按钮的actionPerformed方法中包含的块: if (command.equals("zoom")) { setComponentVisability(false);//try to hide the components from the robot zt

我有一个小问题,我真的不知道如何解决,基本上我想采取截图(使用“机器人”类)我的桌面,不包括实际的程序GUI组件。最初我认为可以通过临时隐藏组件来实现,但每次制作新的屏幕截图时,组件都会包含在图像中

这是获取屏幕截图的按钮的actionPerformed方法中包含的块:

if (command.equals("zoom")) {
    setComponentVisability(false);//try to hide the components from the robot
    zt.screenShoot();//take the screenshot
    setComponentVisability(true);//show the components
} 
“zt.screenshot”截取截图并返回到一个新的JFrame中(用于调试),在我的主框架中,我使用

com.sun.awt.AWTUtilities.setWindowOpaque(systemWindow, false);
方法使背景透明;不确定这是否与这个问题有关

任何帮助都会很好,
谢谢

在隐藏组件和拍摄屏幕截图之间使用短暂的延迟

例如TestScreenshot.java
如果这是在EDT上执行的,那么还需要一个
SwingUtils.invokeLater()
。我在修改代码时遇到了一些问题,但还是设法解决了,我需要一些代表给你一个“勾号”,再次感谢。这不是很好,因为用户可以看到转换之间的闪烁。如果你把它修好了,它就是实心的。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

class TestScreenshot {

    static JLabel screenshot;

    public static void main(String[] args) throws Exception {
        final Robot robot = new Robot();
        SwingUtilities.invokeLater( new Runnable() {
            public void run() {
                final JFrame f = new JFrame("Screenshot");

                JPanel gui = new JPanel(new BorderLayout(3,3));

                gui.setBorder(new EmptyBorder(5,5,5,5));

                f.setContentPane(gui);

                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                screenshot = new JLabel();
                JScrollPane scroll = new JScrollPane(screenshot);
                scroll.setPreferredSize(new Dimension(800,600));
                gui.add(scroll, BorderLayout.CENTER);

                final ActionListener al = new ActionListener() {
                    public void actionPerformed(ActionEvent ae) {
                        Rectangle screenSize = new Rectangle(
                            Toolkit.getDefaultToolkit().getScreenSize());
                        Image image = robot.createScreenCapture(screenSize);
                        setImage(image);
                        f.setVisible(true);
                    }
                };

                JButton grabScreen = new JButton("Grab Screen");
                grabScreen.addActionListener( new ActionListener(){
                    public void actionPerformed(ActionEvent ae) {
                        f.setVisible(false);
                        Timer timer = new Timer(400, al);
                        timer.setRepeats(false);
                        timer.start();
                    }
                } );
                gui.add(grabScreen, BorderLayout.SOUTH);

                f.pack();
                f.setLocationByPlatform(true);
                f.setVisible(true);
            }
        });
    }

    public static void setImage(Image image) {
        screenshot.setIcon(new ImageIcon(image));
    }
}