Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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 我能';我无法获得我想要的JFrame的屏幕截图_Java_Swing - Fatal编程技术网

Java 我能';我无法获得我想要的JFrame的屏幕截图

Java 我能';我无法获得我想要的JFrame的屏幕截图,java,swing,Java,Swing,我有以下代码:` import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JPanel; import javax.s

我有以下代码:`

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;


public class Provare extends JFrame {

    private JPanel contentPane;
    public static int x=100;
    public static int y=100;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    x=(int) (100+(x*(Math.random()*3)));
                    y=(int) (100+(y*(Math.random()*3)));
                    Provare frame = new Provare();
                    frame.setVisible(true);
                    BufferedImage image = new BufferedImage(frame.contentPane.getWidth(),frame.contentPane.getHeight(),BufferedImage.TYPE_INT_RGB );
                    frame.contentPane.printAll(image.getGraphics());
                    ImageIO.write(image, "bmp", new File("C:/Users/Resco/Desktop/scarpe/screen.bmp") );
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Provare() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, x, y);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
    }

    public void paint(Graphics g){
        super.paint(g);
        g.drawString("CIAO",(x/2),(x/2));
        g.drawLine(50, 50, 100, 100);
    }

}
`

我想要的是一个屏幕截图,上面有CIAO和一行文字。 我实际得到的是一个空元素的屏幕截图

有什么建议吗?请随意发布我的代码的修改版本


提前感谢。

您正在打印图像上的
contentPane
内容:
contentPane
没有要打印的内容,它是空的

你必须使用

frame.printAll(image.getGraphics());

侧注:您不应覆盖
JFrame
中的
paint
方法来执行自定义绘制。替代
JPanel
中的
paintComponent
方法。

我的提示是,您的帧尚未准备好。我将尝试在
EventQueue.invokeAndWait
中调用
frame.setVisible(true)
,然后从主线程获取屏幕截图