2017-05-19 19 views
0

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); 
      } 
     } 
    } 
} 
+0

「img/frame.jpg」というページで読み込まれたイメージにイメージを設定しています。更新されたイメージを取得するには、サーバーを呼び出す必要があります。 – Ken

+0

@Ken毎秒新しいイメージを取得していますが、問題はブラウザがキャッシュしていたことです。サーブレットの無限ループではなく、サーブレットを頻繁に呼び出すべきだと思います。 – petehallw

+0

はい、私が言ったように、すでに読み込まれた(キャッシュされた)イメージを取得していて、実際にサーバーに呼び出して更新されたイメージを取得する必要がありました。 – Ken

答えて

1

私はあなたのブラウザが元の画像をキャッシュしているので、それをリフレッシュするための呼び出しがサーバから画像を再プルしないと思います。代わりに、ブラウザのキャッシュ内のイメージが使用されます。したがって、ウェブページ上の画像は同じままである。

リフレッシュを強制するためのヒントhereがあります。それが役に立てば幸い。

+0

本当にありがとうございました。私の方法はまだまだ貧弱だと思いますが、今のところ働いています(時々画像が消えてしまいます。 – petehallw

関連する問題