2013-10-19 105 views
1

有我的代碼。我嘗試分析數據並創建圖形並保存到本地驅動程序。該程序現在工作正常。但是我發現,程序全部完成後,jpg文件只能保存到本地驅動器。但是,數據太多,需要創建太多圖形。整個程序可能會運行幾個小時。我只是想知道我能否實時保存jpg?所以我可以查看它剛剛創建的所有圖。或者,如果我需要在完成所有程序之前停止該程序,我不必放棄所有圖表。使用ImageIO.write Java實時保存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(); 
    } 

} 
+0

我的意思是,有沒有讓我創建文件時,它做的,而不是在存儲器中存儲並等待程序完成的任何功能,我可以使用像file.close()。謝謝 – IanIsAFK

回答

1

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(); 

而且你選擇了一個相對程序文件夾中。下面我選擇了用戶的文件夾,並且 可能創建目錄111mkdirs)。

String userHome = System.getProperty("user.home"); 
File imgFile = new File(userHome + "/111/" + (total/data.size()) + ".jpg"); 
// Windows still allows `/` instead of `\` as path separator. 
imgFile.getParentFile().mkdirs(); 
System.out.println("Writing to image: " + imgFile.getPath()); 
... 
    ImageIO.write(jpg, "JPEG", imgFile); 
+0

我只是想知道爲什麼我不能在我的文件夾中看到他們,如果該程序仍在處理下一個數據 – IanIsAFK

+0

擴展我的答案與文件夾處理。 –