Javaサーブレットに画像ファイルを書きます。ウェブカメラからデータを取得しているので、画像を最新の状態に保つためにファイルに無限ループで書きたいと思っています。Javaサーブレットが無限ループで画像を書き込む
私は自分のウェブページに画像ファイルを埋め込み、毎秒画像を読むためにJavaScript関数を使用しています。私はGETを送信する私のWebページのボタンでサーブレットを開始します。
私の問題は、サーブレットが無限の書き込みループを実行し、ページ上の画像が更新されないということです。 イメージが絶えず書かれているのが私のファイルエクスプローラでわかりますが、私のページでは更新されていません。私はJS関数が呼び出されていることを知っています。私は現在の時刻を更新中のページに書き込んでテストしました。
この無限ループなしで画像を更新するにはどうすればよいですか?
ウェブページ:
<html>
<head>
<title>Webcam CCTV</title>
</head>
<body>
<img id='feed' src="img/frame.jpg" width='600' />
<form method="GET"
action="startCCTV.do">
<br><br>
<center>
<input type="SUBMIT"? value='Start'/>
</center>
</form>
<script src='https://code.jquery.com/jquery-3.1.0.min.js'></script>
<script src="js/main.js"></script>
</body>
</html>
main.js:
window.setInterval(function updateFrame() {
$("#feed").attr('src', 'img/frame.jpg');
}, 1000);
コントローラー:
public class CCTVStart extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
String contextPath = getServletContext().getRealPath("/");
ImageCapturer ic = new ImageCapturer(contextPath);
ic.captureImage();
}
}
モデル:
public class ImageCapturer {
private String mContextPath;
public ImageCapturer(String contextPath) {
mContextPath = contextPath;
}
public void captureImage() throws IOException {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
FileOutputStream os = new FileOutputStream(
new File(mContextPath + "myLog.txt"));
os.write("\nStarting capture...".getBytes());
os.close();
VideoCapture camera = new VideoCapture(0);
Mat frame = new Mat();
camera.read(frame);
if (!camera.isOpened()) {
return;
}
while (true) {
if (camera.read(frame)) {
imwrite(mContextPath + "img\\frame.jpg", frame);
}
}
}
}
「img/frame.jpg」というページで読み込まれたイメージにイメージを設定しています。更新されたイメージを取得するには、サーバーを呼び出す必要があります。 – Ken
@Ken毎秒新しいイメージを取得していますが、問題はブラウザがキャッシュしていたことです。サーブレットの無限ループではなく、サーブレットを頻繁に呼び出すべきだと思います。 – petehallw
はい、私が言ったように、すでに読み込まれた(キャッシュされた)イメージを取得していて、実際にサーバーに呼び出して更新されたイメージを取得する必要がありました。 – Ken