PNG problem
7 отговора
313 прегледа
PNG problem
Napravih servlet koito da vry6ta dinami4en PNG image kato response (v slu4ai ne e prosto edin 4erven kvadrat) Eto i koda:
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.*;
import java.awt.image.*;
import java.io.*;
public class PNG
extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException,
ServletException {
BufferedImage image = new BufferedImage(
100, 100, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
g.setColor(Color.red);
g.fillRect(0, 0, 99, 99);
response.setContentType("image/png");
OutputStream out = response.getOutputStream();
javax.imageio.ImageIO.write(image, "png", out);
out.close();
}
}
Puskam si edin IE otvariam si sevleta i vsi4ko e nared, polu4avam si 4ervenia kvadrat. Pompam refresh i pak vsi4ko e nared.
No sega si pravia edim html file coito da refreshva src-to na image na onmousemove. Eto i koda:
<html>
<head>
<script type="text/javascript">
antic =0
function SendMouseMove()
{
antic++
document.images.vp.src="[линк]"
+"?anti_cache="+antic
}
</script>
<title>
bla
</title>
</ head>
<body bgcolor="#ffffff">
<img name="vp" id="vp" src="[линк]" onmousemove="SendMouseMove()">
</body>
</html>
I kato razmardam cursorora v/u image-a po4vam da molu4avam exceptioni ot servleta. Niakoi da ima idei za6to stava taka:
javax.imageio.IIOException: I/O error writing PNG file!
at com.sun.imageio.plugins.png.PNGImageWriter.write(PNGImageWriter.java:1104)
at javax.imageio.ImageWriter.write(ImageWriter.java:591)
at javax.imageio.ImageIO.write(ImageIO.java:1434)
at javax.imageio.ImageIO.write(ImageIO.java:1508)
at test.PNG.doGet(PNG.java:24)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
at java.lang.Thread.run(Thread.java:536)
Caused by: java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at org.apache.catalina.connector.ResponseBase.flushBuffer(ResponseBase.java:674)
at org.apache.catalina.connector.HttpResponseBase.flushBuffer(HttpResponseBase.java:764)
at org.apache.catalina.connector.ResponseFacade.flushBuffer(ResponseFacade.java:219)
at org.apache.catalina.connector.ResponseStream.flush(ResponseStream.java:244)
at javax.imageio.stream.FileCacheImageOutputStream.flushBefore(FileCacheImageOutputStream.java:212)
at com.sun.imageio.plugins.png.ChunkStream.finish(PNGImageWriter.java:120)
at com.sun.imageio.plugins.png.PNGImageWriter.write_IHDR(PNGImageWriter.java:368)
at com.sun.imageio.plugins.png.PNGImageWriter.write(PNGImageWriter.java:1071)
... 34 more
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.*;
import java.awt.image.*;
import java.io.*;
public class PNG
extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException,
ServletException {
BufferedImage image = new BufferedImage(
100, 100, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
g.setColor(Color.red);
g.fillRect(0, 0, 99, 99);
response.setContentType("image/png");
OutputStream out = response.getOutputStream();
javax.imageio.ImageIO.write(image, "png", out);
out.close();
}
}
Puskam si edin IE otvariam si sevleta i vsi4ko e nared, polu4avam si 4ervenia kvadrat. Pompam refresh i pak vsi4ko e nared.
No sega si pravia edim html file coito da refreshva src-to na image na onmousemove. Eto i koda:
<html>
<head>
<script type="text/javascript">
antic =0
function SendMouseMove()
{
antic++
document.images.vp.src="[линк]"
+"?anti_cache="+antic
}
</script>
<title>
bla
</title>
</ head>
<body bgcolor="#ffffff">
<img name="vp" id="vp" src="[линк]" onmousemove="SendMouseMove()">
</body>
</html>
I kato razmardam cursorora v/u image-a po4vam da molu4avam exceptioni ot servleta. Niakoi da ima idei za6to stava taka:
javax.imageio.IIOException: I/O error writing PNG file!
at com.sun.imageio.plugins.png.PNGImageWriter.write(PNGImageWriter.java:1104)
at javax.imageio.ImageWriter.write(ImageWriter.java:591)
at javax.imageio.ImageIO.write(ImageIO.java:1434)
at javax.imageio.ImageIO.write(ImageIO.java:1508)
at test.PNG.doGet(PNG.java:24)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
at java.lang.Thread.run(Thread.java:536)
Caused by: java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at org.apache.catalina.connector.ResponseBase.flushBuffer(ResponseBase.java:674)
at org.apache.catalina.connector.HttpResponseBase.flushBuffer(HttpResponseBase.java:764)
at org.apache.catalina.connector.ResponseFacade.flushBuffer(ResponseFacade.java:219)
at org.apache.catalina.connector.ResponseStream.flush(ResponseStream.java:244)
at javax.imageio.stream.FileCacheImageOutputStream.flushBefore(FileCacheImageOutputStream.java:212)
at com.sun.imageio.plugins.png.ChunkStream.finish(PNGImageWriter.java:120)
at com.sun.imageio.plugins.png.PNGImageWriter.write_IHDR(PNGImageWriter.java:368)
at com.sun.imageio.plugins.png.PNGImageWriter.write(PNGImageWriter.java:1071)
... 34 more
Re: PNG problem
Може би не ползваш PNG файл съвместим с броузъра ти (или развален PNG файл).
Когато сървера се опитва да пише хедъра на файла броузъра ти затваря връзката:
at com.sun.imageio.plugins.png.PNGImageWriter.write_IHDR(PNGImageWriter.java:368)
Мисля че не трябва да викаш out.close()
Когато сървера се опитва да пише хедъра на файла броузъра ти затваря връзката:
at com.sun.imageio.plugins.png.PNGImageWriter.write_IHDR(PNGImageWriter.java:368)
Мисля че не трябва да викаш out.close()
Re: PNG problem
Probvah i bez out.close(), pak ne strava.
PNG fail-a evda li e nesyvmestim, za6toto ako prosto izkiam servelt-a si raboti, polu4avam PNG faila i brauzera go pokazva. Problema stava samo kogato podam tvyde mnogo requesti blizki vav vremto (pone taka predpolagam), za6toto ako dvija cursora piksel po piksel v/u image-a sa6to niama problem, no kogato go zazdvija barzo se polu4avat exception-ite.
PNG fail-a evda li e nesyvmestim, za6toto ako prosto izkiam servelt-a si raboti, polu4avam PNG faila i brauzera go pokazva. Problema stava samo kogato podam tvyde mnogo requesti blizki vav vremto (pone taka predpolagam), za6toto ako dvija cursora piksel po piksel v/u image-a sa6to niama problem, no kogato go zazdvija barzo se polu4avat exception-ite.
Re: PNG problem
Комантара за out.close() не беше свързан с проблема ти.
Нямяше ли същия проблем с JPG файлове?
Нямяше ли същия проблем с JPG файлове?
Re: PNG problem
Da s JPG-tata beshe sashtata rabota.
A tova s out-a iskash da kajesh, 4e e principno e po-dobre da ne go close-vam li?
A tova s out-a iskash da kajesh, 4e e principno e po-dobre da ne go close-vam li?
Re: PNG problem
Да, мисля че е по-добре да не го пипаш, сървърът би трябвало сам да си управлява ресурсите.
Не ми е ясно много какво се опитваш да направиш, но мога да направя още няколко предположения.
При много заявки някой от тези имидж файлове може да попада частично в HTTP пакет и това да кара броузера да си мисли че е развален.
Разбери какво точно трябва да се получи на ниско ниво (HTTP) и виж дали точно това се връща от сървъра ти.
Пробвай да flush-ваш стриима след всеки файл.
Пробвай с различен броузсър. Може някой да покаже различна грешка, която да ти помогне да си разбереш проблема.
Не ми е ясно много какво се опитваш да направиш, но мога да направя още няколко предположения.
При много заявки някой от тези имидж файлове може да попада частично в HTTP пакет и това да кара броузера да си мисли че е развален.
Разбери какво точно трябва да се получи на ниско ниво (HTTP) и виж дали точно това се връща от сървъра ти.
Пробвай да flush-ваш стриима след всеки файл.
Пробвай с различен броузсър. Може някой да покаже различна грешка, която да ти помогне да си разбереш проблема.
Re: PNG problem
Tova koeto se opitvam da napravia e mnogo prosto:
Servlet koito da vrashta PNG image.
Ami imiga e mnogo veroiatno da e razvalen 6tom servleta mi dava exception.
Probvah da flushvam striima - ne pomogna.
Probvah s MOzilla no tam pak ne znam za6to no ne mi raboti javascripta
Servlet koito da vrashta PNG image.
Ami imiga e mnogo veroiatno da e razvalen 6tom servleta mi dava exception.
Probvah da flushvam striima - ne pomogna.
Probvah s MOzilla no tam pak ne znam za6to no ne mi raboti javascripta
Re: PNG problem
abe viz kvo, ti kato razmurdash mishkata nai veroqtno se generirat malko poveche
"mousemove" obekti i browsera suotvetno floodva sus zaqwki Servleta.
i poneze vizdash samo edna stranica, IE-to predcenqva che predishniq stream ne mu trqbwa i go ZATVARQ. i zatva ti vika toq Exception - shtoto nqma stream.
i osthe nesto,
ako otdelqsh poveche vreme da se susredotochish vurhu
problema shte si go opravish sam, raznite forumi gubqt poveche vreme.
"mousemove" obekti i browsera suotvetno floodva sus zaqwki Servleta.
i poneze vizdash samo edna stranica, IE-to predcenqva che predishniq stream ne mu trqbwa i go ZATVARQ. i zatva ti vika toq Exception - shtoto nqma stream.
i osthe nesto,
ako otdelqsh poveche vreme da se susredotochish vurhu
problema shte si go opravish sam, raznite forumi gubqt poveche vreme.