使用ImageIO.write Java实时保存jpg

使用ImageIO.write Java实时保存jpg,java,file,Java,File,这是我的密码。我尝试分析数据,创建图形并保存到本地驱动程序。程序现在运行良好。但我发现jpg文件只能在程序完成后保存到本地驱动器。但是,数据太多,需要创建的图形太多。整个程序可能运行数小时。我只是想知道我能让它实时保存jpg吗?所以我可以查看它刚刚创建的所有图形。或者,如果我需要在程序完成之前停止它,我不必放弃所有图形 多谢各位 protected void paintComponent(Graphics g) { System.out.println("go"); super.

这是我的密码。我尝试分析数据,创建图形并保存到本地驱动程序。程序现在运行良好。但我发现jpg文件只能在程序完成后保存到本地驱动器。但是,数据太多,需要创建的图形太多。整个程序可能运行数小时。我只是想知道我能让它实时保存jpg吗?所以我可以查看它刚刚创建的所有图形。或者,如果我需要在程序完成之前停止它,我不必放弃所有图形

多谢各位

protected void paintComponent(Graphics g) {
    System.out.println("go");
    super.paintComponent(g);
    BufferedImage jpg = new BufferedImage(1040, 400,
            BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = jpg.createGraphics();
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                        RenderingHints.VALUE_ANTIALIAS_ON);
    int w = getWidth();
    int h = getHeight();
    double total=0;
    // Draw ordinate.
    g2.draw(new Line2D.Double(SPACE, SPACE, SPACE, h-SPACE));
    // Draw abcissa.
    g2.draw(new Line2D.Double(SPACE, h/2, w-SPACE, h/2));
    double xInc = (double)(w - 2*SPACE)/(data.size()-1);
    double scale = (double)(h/2 - SPACE*3)/getMax();
    // Mark data points.
    g2.setPaint(Color.red);
    for(int i = 0; i < data.size(); i++) {
        double x = SPACE + i*xInc;
        double y;
        if(data.get(i)!=0){
            y= h/2 - SPACE - scale*data.get(i);
            total = total + data.get(i);
        }else{
            y = h/2;
        }

        g2.fill(new Ellipse2D.Double(x, y-1, 4, 4));

    }
    try {
        ImageIO.write(jpg, "JPEG", new File("111\\"+total/data.size() + ".jpg"));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}
受保护的组件(图形g){
System.out.println(“go”);
超级组件(g);
BuffereImage jpg=新的BuffereImage(1040400,
BuffereImage.TYPE_INT_RGB);
Graphics2D g2=jpg.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_抗锯齿,
RenderingHints.VALUE_ANTIALIAS_ON);
int w=getWidth();
inth=getHeight();
双倍合计=0;
//画坐标。
g2.绘制(新Line2D.Double(空格,空格,空格,h-空格));
//画abcissa。
g2.绘制(新Line2D.Double(空格,h/2,w空格,h/2));
double xInc=(double)(w-2*空格)/(data.size()-1);
双刻度=(双刻度)(h/2-空格*3)/getMax();
//标记数据点。
g2.setPaint(颜色为红色);
对于(int i=0;i
paintComponent
在需要重新绘制时被称为事件处理。而且可能经常发生。画画也要快。因此,将图像保存在绘制组件外部

可能会检查文件是否存在,或者对文件进行编号

也调用
Graphics.dispose()
,以防止资源泄漏

BufferedImage jpg = new BufferedImage(1040, 400,
        BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = jpg.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                    RenderingHints.VALUE_ANTIALIAS_ON);
paintComponent(g2);
g2.dispose();

您还选择了一个程序相对文件夹。下面我选择了用户的文件夹 如果不存在(
mkdirs
),则可能创建目录
111


每当需要重新绘制时,
paintComponent
被称为事件处理。而且可能经常发生。画画也要快。因此,将图像保存在绘制组件外部

可能会检查文件是否存在,或者对文件进行编号

也调用
Graphics.dispose()
,以防止资源泄漏

BufferedImage jpg = new BufferedImage(1040, 400,
        BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = jpg.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                    RenderingHints.VALUE_ANTIALIAS_ON);
paintComponent(g2);
g2.dispose();

您还选择了一个程序相对文件夹。下面我选择了用户的文件夹 如果不存在(
mkdirs
),则可能创建目录
111


我只是想知道,如果程序仍在处理下一个数据,为什么我在文件夹中看不到它们?如果程序仍在处理下一个数据,为什么我在文件夹中看不到它们?如果程序仍在处理下一个数据,为什么我在文件夹中看不到它们?如果程序仍在处理下一个数据,为什么我在文件夹中看不到它们这使我能够在创建文件时创建它,而不是存储在内存中并等待程序完成。谢谢,我的意思是,有没有像file.close()这样的函数可以让我在创建文件时使用,而不是存储在内存中等待程序完成。谢谢