【问题标题】:Flying Sauces-> Stream closed error occured repeteadlyFlying Saucers-> Stream closed 错误反复发生
【发布时间】:2014-08-17 14:52:36
【问题描述】:

我使用飞碟来生成网站的截图(任何网站,所以我没有任何控制权)。 因此,对于其中一些,由于它们的构造,会出现错误。 问题是,对于其中一些人来说,我有这个反复出现的“流关闭”错误。由于问题出在飞碟程序内部,我无法访问(但可以看到错误),也无法停止。 我试图将有问题的操作放在一个线程中,如果出现错误我可以关闭它,但是我的代码无法检测到错误。 这是我的代码:

Tidy tidy=new Tidy();
        tidy.setXHTML(true);
        tidy.setForceOutput(true);
        tidy.setShowWarnings(false);
        tidy.setQuiet(true);
        String[] dirPaths=new String[]
        {
            PropertiesManager.getProperty(DYNAMIC_IMAGES_ROOT),
            PropertiesManager.getProperty(DYNAMIC_IMAGES_TEMPLATE),
            PropertiesManager.getProperty(DYNAMIC_IMAGES_TEMP)
        };
        String path=PathConstructor.getPath(dirPaths);
        File temporaryXhtmlFile=new File(path,GenericFunctions.getUrlRoot(url)+".html");
        if(!temporaryXhtmlFile.getParentFile().exists())
            temporaryXhtmlFile.getParentFile().mkdirs();    
        temporaryXhtmlFile.createNewFile();
        FileOutputStream fous=new FileOutputStream(temporaryXhtmlFile);
        InputStream inputStream=new URL(url).openStream();
        tidy.parse(inputStream, fous);
        fous.close();
        String finalUrl=temporaryXhtmlFile.toURI().toURL().toString();
        final Java2DRenderer renderer = new Java2DRenderer(finalUrl,width,height);
        renderer.setBufferedImageType(BufferedImage.TYPE_INT_ARGB);
        final CountDownLatch cdl=new CountDownLatch(1);
        final BufferedImage[] bufferedImageArray=new BufferedImage[1];
        Thread getImageThread=new Thread()
        {
            @Override
            public void run() {
                bufferedImageArray[0]=renderer.getImage();
                cdl.countDown();
            }
        };
        getImageThread.start();
        try {
            cdl.await();
        } catch (InterruptedException e) {
            getImageThread.interrupt();
        }
        File finalFile=new File(path,fileName);
        saveImage(finalFile, bufferedImageArray[0]);
        temporaryXhtmlFile.delete();

还有我的错误(大约每 30 秒重复一次)

java.io.IOException: Stream closed
at java.io.BufferedInputStream.getInIfOpen(Unknown Source)
at java.io.BufferedInputStream.read1(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at org.xhtmlrenderer.css.parser.Lexer.zzRefill(Lexer.java:1634)
at org.xhtmlrenderer.css.parser.Lexer.yylex(Lexer.java:1865)
at org.xhtmlrenderer.css.parser.CSSParser.next(CSSParser.java:1798)
at org.xhtmlrenderer.css.parser.CSSParser.la(CSSParser.java:1810)
at org.xhtmlrenderer.css.parser.CSSParser.stylesheet(CSSParser.java:159)
at org.xhtmlrenderer.css.parser.CSSParser.parseStylesheet(CSSParser.java:89)
at org.xhtmlrenderer.context.StylesheetFactoryImpl.parse(StylesheetFactoryImpl.java:78)
at org.xhtmlrenderer.context.StylesheetFactoryImpl.parse(StylesheetFactoryImpl.java:95)
at org.xhtmlrenderer.context.StylesheetFactoryImpl.getStylesheet(StylesheetFactoryImpl.java:174)
at org.xhtmlrenderer.context.StyleReference.readAndParseAll(StyleReference.java:123)
at org.xhtmlrenderer.context.StyleReference.setDocumentContext(StyleReference.java:107)
at org.xhtmlrenderer.swing.Java2DRenderer.setDocument(Java2DRenderer.java:317)
at org.xhtmlrenderer.swing.Java2DRenderer.getImage(Java2DRenderer.java:265)

我接受任何建议。 非常感谢

【问题讨论】:

    标签: image stream ioexception recurrence flying-saucer


    【解决方案1】:

    您描述的错误前几天也给我带来了很多麻烦。您的问题的解决方案是指定正确的 css 样式表地址,以便 xhtmlrenderer 可以访问您的 css 文件。

    例如,如果您有一些样式表或图像作为 /styles/samplestyle.css 在您的 html 文件中,您必须将其转换为filepath/styles/samplestyles.css 同样适用于图片。我相信这会解决您的问题。

    目录路径应位于C:/filepath/ 或保存样式表的任何其他磁盘中。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,并通过在 freemarker 模板中包含 css 文件时添加 file 前缀来修复它。所以这不起作用:

      <link rel="stylesheet" type="text/css" href="/opt/3six5/template/style.css"/>
      

      这行得通:

      <link rel="stylesheet" type="text/css" href="file:///opt/3six5/template/style.css"/>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多