java - 将 Jpanel 写入缓冲图像堆栈溢出

标签 java swing bufferedimage

我正在尝试将 JPanel 图片写入 BufferedImage(稍后转换为渲染图像)。由于某种原因,我在 AWT-EventQueue-0 线程中遇到堆栈溢出错误,并且不确定是否有我忽略的原因。

有问题的代码:

public BufferedImage createImage() {
    int w = getWidth();
    int h = getHeight();
    BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
    cp.paint(bi.getGraphics());

    //debug script
    File outputfile = new File("image"+index+".jpg");
    try {
        ImageIO.write(bi, "jpg", outputfile);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    index++;


    return bi;
}

JPanel 绘画组件

@Override
protected void paintComponent(Graphics g) {

    super.paintComponent(g);
    r = new Random(System.nanoTime());
    int maxSize = 100;
    int randX = r.nextInt(getWidth());
    int randY = r.nextInt(getHeight());
    int randWidth = r.nextInt(maxSize);
    int randHeight = r.nextInt(maxSize);
    Color color = new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256));
    Graphics2D g2d = (Graphics2D) g;

    ovals.add(new MyCircles(randX, randY, randWidth, randHeight, color));   
    for (MyCircles c : ovals) {
            c.paint(g2d);
    }
    g2d.setColor(getForeground());


    repaint();

    double current = ImageComparator.calcDistance((RenderedImage)createImage());

    //debugging script
    System.out.println("Current: " + current);
    System.out.println("Previous" + previous);


    if(current > previous) {
        ovals.remove(ovals.size()-1);
    }
    else {
        previous = current;
    }


}

任何有关如何修改此问题的见解将不胜感激!

最佳答案

删除 paintComponent 中对 repaint 的调用,这会导致该方法被无限次调用

关于java - 将 Jpanel 写入缓冲图像堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30357381/

相关文章:

java - 如何在线程中同步getter和setter

java - 当 ftp 站点未连接时 GUI 被卡住

java - 在不损失质量的情况下调整图像大小

java - 如果服务器不可用,如何防止应用程序卡住?

java - 需要对 Java 线程 : start() and run() 进行一些说明

java - 在不关闭菜单的情况下在菜单中动态添加菜单项

grails - Grails:将BufferedImage写入响应

java - 我想做一个随机图像生成器,但它不起作用

java - Java 中的线程安全多线程

java - 用 Java 动画绘制连续复杂的图像