我正在Java servlet中编写一个图像文件。当它从网络摄像头获取数据时,我想以无限循环写入文件,以使图像保持最新。
我将图像文件嵌入到我的网页中,并使用JavaScript函数每秒读取图像。我在我的网页上用一个按钮启动servlet,然后发送一个GET。
我的问题是,这可能是显而易见的,servlet运行它的无限写入循环并且图像不会在页面上更新。 我可以在我的文件浏览器中看到图像是不断写入的,但是我的页面上没有更新。我知道正在调用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 :(得分:1)
我猜你的浏览器正在缓存原始图像,因此后续调用刷新它不会从服务器重新提取图像。而是使用浏览器缓存中的图像。因此,网页上的图像保持不变。
强制刷新有一个很棒的提示here。希望它有所帮助。