2016-05-17 5 views
0

現在、Robot機能を使用してスクリーンキャプチャを作成しようとしています。今のところ私はすでにボタンを使ってスクリーンショットし、イメージの形で保存することができます。今私は同じことをしたいが、私はscreenshot1.png、screenshot2.pngのような別のファイル名を生成したい。 forループを使ってランダムに数値を生成する方法を知っていますか?Java:Robotスクリーンキャプチャのランダムファイル名を生成

これが私の現在のJava動作するコードです:

private void jbtnCaptureActionPerformed(java.awt.event.ActionEvent evt) { 
     // TODO add your handling code here: 
     try { 
      Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); 
      Robot ro = new Robot(); 
      BufferedImage capture = ro.createScreenCapture(screenRect); 
      File f; 
      f = new File("myimage1.jpg");       
      ImageIO.write(capture, "jpg", f); 
      System.out.println("Success"); 



     } catch (Exception e){ 
      System.out.println("Unable to capture the screen" + e); 
     } 

} 

誰かがこの上で私を助けることができます。前もって感謝します。関数の外擬似乱数発生器を初期化し、別のスクリーンショットからそれを維持、もちろん

Random rnd = new Random(); 
String filename = "screenshot" + rnd.nextInt() + ".png"; 

+1

.. [X] .JPG、なしファイルまで、数をインクリメントすると、その名前に存在するファイル名の存在をチェックしませ「ランダム」であるか?ランダムなことは、ファイル名でスクリーンキャプチャのシーケンスを伝えることができないことを意味します。ランダムには、ファイル名が重複している可能性もあります。 –

+0

それで@AdrianShumを行うには良い方法がありますか?なぜなら私は、目的を達成するために複数の画像を表示する必要があるからです。 – anonymous5671

+1

あなたのアプリケーションで実行中のシーケンス番号を保持することはできませんか? –

答えて

2

私は各スクリーンキャプチャが何らかの種類のボタン(ループ内の複数のキャプチャではなく)を右クリックして起動すると思いますか?

最もストレートフォワードな方法は、あなたのファイル名にシーケンスを実行しているとして、整数を維持することです:

private void jbtnCaptureActionPerformed(java.awt.event.ActionEvent evt) { 
    ..... 
      File f = new File("myimage" + (this.filenameSeq++) + .jpg"); 
    ...... 
} 

そして、あなたのキャプチャが非常に頻繁に発生していない場合(例えば、ファイル毎秒数百人)実行中のシーケンスを保持しないようにするための別の方法があります。現在の時刻に基づいてファイル名を生成し、ファイルが存在するかどうかを確認することができます。存在する場合は、ファイルが存在しないことがわかるまでシーケンス番号を続けて追加してください。擬似コードで:

String filenameBase = "myImage"; 
String currentTimestamp = new SimpleDateFormat("yyyymmddHHMMss").format(now()); 
File f = new File(filenameBase + currentTimestamp + ".png"); 
for (int i = 0; f.exists(); i++) { 
    f = new File(filenameBase + currentTimestamp + "-" + i + ".png"); 
} 
// so here, you will have a filename which is not yet exists in your filessystem 
+0

「指定されたオブジェクトを日付としてフォーマットできません」 – anonymous5671

+1

私はそれが疑似コードだと言った!それはあなたにコピー&ペーストを目指すのではなく、アイデアを伝えることです! –

0

単に擬似乱数生成器を使用しています。

0

あなたがそれをしたいなぜなぜ動的

public File getUniqueFile(String name) { 
    int i=1; 
    File file; 
    do { 
     file = new File(name + (i++) + ".jpg"); 
    } while (file.exists()); 
    return file; 
} 
+0

はAdrianが同じ答えを与えていたことに気付かなかった – slipperyseal

関連する問題