飞酱->流关闭错误重复发生



我使用飞碟生成网站的截图(任何网站,所以我没有任何控制它)。因此,对于其中的一些,由于它们的结构,错误发生了。问题是,对于其中一些,我有这个"流关闭"错误,反复发生。由于问题在飞碟程序内部,我无法访问它(但我可以看到错误),也无法停止它。我试图将有问题的操作放在线程中,在发生错误时可以关闭,但是我的代码无法检测到错误。下面是我的代码:

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)
我接受任何建议。谢谢大家

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

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

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

我遇到了同样的问题,并通过在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"/>

相关内容

  • 没有找到相关文章