アップデート:
いくつかの優れた解決策がありましたが、前提に問題があることに気付きました。プロセスが実行されると、rt.exec は Java コードに戻らないようです。お世話になりました!
プログラムで毎秒スクリーンキャップを取得したいのですが、各スクリーンキャップのタイトルはタイムスタンプにする必要があります。これを達成するためにvlcを使用しています。
starttime = System.nanoTime();
screencapProcess = rt.exec("C:\\VLC\\vlc screen:// --dshow-vdev=screen-capture-recorder --dshow-fps=1 -I dummy --dummy-quiet --rate=1 --video-filter=scene --vout=dummy --scene-format=jpg --scene-ratio=1 --scene-prefix=snap --scene-path=" + path +" --scene-prefix="+ "ScreenCapAt" + ( String.valueOf(((long)System.nanoTime() - starttime)).substring(9, 14))+" vlc://quit ");
関連する部分は次のとおりです。
String.valueOf(((long)System.nanoTime() - starttime)).substring(9, 14))
これにより、nanoTimes が 1 未満の場合、範囲外のインデックス例外が発生します。
「System.nanoTime() - starttime」をこの行の外側の変数として宣言して長さを取得することはできません。それは私の時間を変更するからです。
この宣言されていない長さが不明な変数の最後の 5 桁を 1 行で取得する方法はありますか?
この回答は、私の rt.exec 行に収まる必要があります。
いくつかの考え:
- ビット単位のシフトとマスキング。
- 私の.execへのパイプ
- 後処理
- 新しいクラスの作成
- System.nanoTime() - starttime を再度呼び出すと、操作の時間が長くなり、計算が中断されます。
- キャプチャの時間をアトミックに取得するより良い方法はありますか?