2017-02-27 6 views
-2

J'ai quelques problèmes lorsque je fais plusieurs captures d'écran dans quelques temps: si, par exemple, je fais deux captures d'écran, la seconde capture d'écran est parfois la même que la première.Plusieurs captures d'écran capturent la même image

Voici mon code:

public static void main(String[] args) { 
    BufferedImage screenshot = screen(); 
    save_screen(screenshot,"title1"); 
    //some instructions 
    screenshot=screen(); 
    save_screen(screenshot,"title2"); 
} 

private static BufferedImage screen(){ 
    BufferedImage image=null; 
    try { 
     image = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize())); 
     ImageIO.write(image, "png", new File("/screenshot.png")); 
    } catch (HeadlessException e2) { 
     // TODO Auto-generated catch block 
     e2.printStackTrace(); 
    } catch (AWTException e2) { 
     // TODO Auto-generated catch block 
     e2.printStackTrace(); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    return image; 
} 

private static void save_screen(BufferedImage image,String title){ 
    File output = new File("C:\\Users\\MyPC\\Desktop\\" + title + ".png"); 
    File dir = output.getParentFile(); 
    if (dir.exists() || dir.mkdirs()) { 
    try { 
     ImageIO.write(image, "PNG", output); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    }  
    } else { 
     System.out.println("Bad Path - " + dir); 
    }  
} 

Que puis-je faire pour résoudre ce problème?

Merci d'avance!

+0

Ajouter un intervalle de temps aussi bas que 0,5 sec. ** supérieur ** temps ou ** inférieur ** – Thecarisma

+0

Personnellement, j'éviterais d'écrire la capture d'écran sur le disque lorsque vous la capturez, c'est un overhead que vous ne voulez peut-être pas. Vous pourriez envisager d'utiliser la même instance de 'Robot', réduire encore la surcharge. Quel est le délai général entre les tirs? – MadProgrammer

Répondre

0

Il suffit d'ajouter un intervalle de temps le code ci-dessous capture l'image exactement après 1 seconde

public static void main(String[] args) { 
BufferedImage screenshot = screen(); 
save_screen(screenshot,"title1"); 
//some instructions 
//Sleep for 1 seconds 
Thread.Sleep(1000); 
screenshot=screen(); 
save_screen(screenshot,"title2"); }