Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Никак не поймаю исключение


Автор: zss 16.12.2005, 11:53
Есть класс, который создает таймер.
По событию таймера парсится XML файл и отоброжаются графики с помощью JFreeChart.

Код

public class fmMain extends JFrame {

    private String filename = null;
    private long timeModified = 0;
    private Timer timer = null;

...
    private void jbInit () throws Exception {

        ActionListener listener = new ActionListener () {
            public void actionPerformed ( ActionEvent event ) {

                File file = new File ( filename );

                if ( file.exists () && ( timeModified < file.lastModified () ) ) {
                    timeModified = file.lastModified ();
                    timer.stop ();
                    readXMLDocument ( file ); // здесь все нормально - все читается
                    timer.start ();
                }
            } // здесь слетает
        };

        timer = new Timer ( 0, listener );
        timer.setRepeats ( true );
        timer.start ();
        timer.setDelay ( 1000 );
...
    }


слетает в совсем неожиданном месте - никак не пойму из-за чего и где smile
Код

sun.dc.pr.PRException: endPath: bad path
    at sun.dc.pr.Rasterizer.endPath(Rasterizer.java:537)
    at sun.java2d.pipe.DuctusRenderer.createShapeRasterizer(DuctusRenderer.java:374)
    at sun.java2d.pipe.DuctusShapeRenderer.renderPath(DuctusShapeRenderer.java:57)
    at sun.java2d.pipe.DuctusShapeRenderer.fill(DuctusShapeRenderer.java:49)
    at sun.java2d.SunGraphics2D.fill(SunGraphics2D.java:2156)
    at org.jfree.chart.renderer.XYBarRenderer.drawItem(XYBarRenderer.java:284)
    at org.jfree.chart.plot.XYPlot.render(XYPlot.java:2097)
    at org.jfree.chart.plot.XYPlot.draw(XYPlot.java:1880)
    at org.jfree.chart.JFreeChart.draw(JFreeChart.java:892)
    at org.jfree.chart.ChartPanel.paintComponent(ChartPanel.java:970)
    at javax.swing.JComponent.paint(JComponent.java:808)
    at javax.swing.JComponent.paintChildren(JComponent.java:647)
    at javax.swing.JComponent.paint(JComponent.java:817)
    at javax.swing.JComponent.paintChildren(JComponent.java:647)
    at javax.swing.JComponent.paint(JComponent.java:817)
    at javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4795)
    at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4748)
    at javax.swing.JComponent._paintImmediately(JComponent.java:4692)
    at javax.swing.JComponent.paintImmediately(JComponent.java:4495)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:410)
    at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:117)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:178)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:454)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
sun.dc.pr.PRException: endPath: bad path
    at sun.dc.pr.Rasterizer.endPath(Rasterizer.java:537)
    at sun.java2d.pipe.DuctusRenderer.createShapeRasterizer(DuctusRenderer.java:374)
    at sun.java2d.pipe.DuctusShapeRenderer.renderPath(DuctusShapeRenderer.java:57)
    at sun.java2d.pipe.DuctusShapeRenderer.draw(DuctusShapeRenderer.java:45)
    at sun.java2d.SunGraphics2D.draw(SunGraphics2D.java:2128)
    at org.jfree.chart.renderer.XYBarRenderer.drawItem(XYBarRenderer.java:288)
    at org.jfree.chart.plot.XYPlot.render(XYPlot.java:2097)
    at org.jfree.chart.plot.XYPlot.draw(XYPlot.java:1880)
    at org.jfree.chart.JFreeChart.draw(JFreeChart.java:892)
    at org.jfree.chart.ChartPanel.paintComponent(ChartPanel.java:970)
    at javax.swing.JComponent.paint(JComponent.java:808)
    at javax.swing.JComponent.paintChildren(JComponent.java:647)
    at javax.swing.JComponent.paint(JComponent.java:817)
    at javax.swing.JComponent.paintChildren(JComponent.java:647)
    at javax.swing.JComponent.paint(JComponent.java:817)
    at javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4795)
    at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4748)
    at javax.swing.JComponent._paintImmediately(JComponent.java:4692)
    at javax.swing.JComponent.paintImmediately(JComponent.java:4495)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:410)
    at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:117)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:178)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:454)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
sun.dc.pr.PRException: endPath: bad path
    at sun.dc.pr.Rasterizer.endPath(Rasterizer.java:537)
    at sun.java2d.pipe.DuctusRenderer.createShapeRasterizer(DuctusRenderer.java:374)
    at sun.java2d.pipe.DuctusShapeRenderer.renderPath(DuctusShapeRenderer.java:57)
    at sun.java2d.pipe.DuctusShapeRenderer.fill(DuctusShapeRenderer.java:49)
    at sun.java2d.SunGraphics2D.fill(SunGraphics2D.java:2156)
    at org.jfree.chart.renderer.XYBarRenderer.drawItem(XYBarRenderer.java:284)
    at org.jfree.chart.plot.XYPlot.render(XYPlot.java:2097)
    at org.jfree.chart.plot.XYPlot.draw(XYPlot.java:1880)
    at org.jfree.chart.JFreeChart.draw(JFreeChart.java:892)
    at org.jfree.chart.ChartPanel.paintComponent(ChartPanel.java:970)
    at javax.swing.JComponent.paint(JComponent.java:808)
    at javax.swing.JComponent.paintChildren(JComponent.java:647)
    at javax.swing.JComponent.paint(JComponent.java:817)
    at javax.swing.JComponent.paintChildren(JComponent.java:647)
    at javax.swing.JComponent.paint(JComponent.java:817)
    at javax.swing.JComponent.paintChildren(JComponent.java:647)
    at javax.swing.JComponent.paint(JComponent.java:817)
    at javax.swing.JComponent.paintChildren(JComponent.java:647)
    at javax.swing.JComponent.paint(JComponent.java:817)
    at javax.swing.JLayeredPane.paint(JLayeredPane.java:557)
    at javax.swing.JComponent.paintChildren(JComponent.java:647)
    at javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4802)
    at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4748)
    at javax.swing.JComponent.paint(JComponent.java:798)
    at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:21)
    at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60)
    at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97)
    at java.awt.Container.paint(Container.java:1312)
    at sun.awt.RepaintArea.paint(RepaintArea.java:177)
    at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:260)
    at java.awt.Component.dispatchEventImpl(Component.java:3678)
    at java.awt.Container.dispatchEventImpl(Container.java:1627)
    at java.awt.Window.dispatchEventImpl(Window.java:1606)
    at java.awt.Component.dispatchEvent(Component.java:3477)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
sun.dc.pr.PRException: endPath: bad path
    at sun.dc.pr.Rasterizer.endPath(Rasterizer.java:537)
    at sun.java2d.pipe.DuctusRenderer.createShapeRasterizer(DuctusRenderer.java:374)
    at sun.java2d.pipe.DuctusShapeRenderer.renderPath(DuctusShapeRenderer.java:57)
    at sun.java2d.pipe.DuctusShapeRenderer.draw(DuctusShapeRenderer.java:45)
    at sun.java2d.SunGraphics2D.draw(SunGraphics2D.java:2128)
    at org.jfree.chart.renderer.XYBarRenderer.drawItem(XYBarRenderer.java:288)
    at org.jfree.chart.plot.XYPlot.render(XYPlot.java:2097)
    at org.jfree.chart.plot.XYPlot.draw(XYPlot.java:1880)
    at org.jfree.chart.JFreeChart.draw(JFreeChart.java:892)
    at org.jfree.chart.ChartPanel.paintComponent(ChartPanel.java:970)
    at javax.swing.JComponent.paint(JComponent.java:808)
    at javax.swing.JComponent.paintChildren(JComponent.java:647)
    at javax.swing.JComponent.paint(JComponent.java:817)
    at javax.swing.JComponent.paintChildren(JComponent.java:647)
    at javax.swing.JComponent.paint(JComponent.java:817)
    at javax.swing.JComponent.paintChildren(JComponent.java:647)
    at javax.swing.JComponent.paint(JComponent.java:817)
    at javax.swing.JComponent.paintChildren(JComponent.java:647)
    at javax.swing.JComponent.paint(JComponent.java:817)
    at javax.swing.JLayeredPane.paint(JLayeredPane.java:557)
    at javax.swing.JComponent.paintChildren(JComponent.java:647)
    at javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4802)
    at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4748)
    at javax.swing.JComponent.paint(JComponent.java:798)
    at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:21)
    at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60)
    at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97)
    at java.awt.Container.paint(Container.java:1312)
    at sun.awt.RepaintArea.paint(RepaintArea.java:177)
    at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:260)
    at java.awt.Component.dispatchEventImpl(Component.java:3678)
    at java.awt.Container.dispatchEventImpl(Container.java:1627)
    at java.awt.Window.dispatchEventImpl(Window.java:1606)
    at java.awt.Component.dispatchEvent(Component.java:3477)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)


Автор: chief39 16.12.2005, 15:35
Трудно понять что и где, но судя по стеку
Код

at sun.dc.pr.Rasterizer.endPath(Rasterizer.java:537)
at sun.java2d.pipe.DuctusRenderer.createShapeRasterizer(DuctusRenderer.java:374)

это происходит в JFreeChart'е в момент построения графика по уже считанному файлу.

Код

at sun.dc.pr.Rasterizer.endPath(Rasterizer.java:537)
не сталкивался, но сдаётся мне что просто неправильно описана структура какая-то в файле.

Есть DTD или XMLschema для твоего документа? Или полагаешься на то, что файл правильно заполнен? опиши простенькую дтдшку и включи валидацию при скачивании файла.

Автор: zss 16.12.2005, 18:43
Цитата(chief39 @ 16.12.2005, 15:35)
Есть DTD или XMLschema для твоего документа? Или полагаешься на то, что файл правильно заполнен? опиши простенькую дтдшку и включи валидацию при скачивании файла.

а можно об этом поподробнее

Автор: chief39 16.12.2005, 20:25
Цитата(zss @ 16.12.2005, 18:43)
а можно об этом поподробнее

можно, только желательно знать что именно у тебя тут:
Код

readXMLDocument ( file );

и чё в файле

твой хмл документ наверняка придерживается каких-то правил. Вроде... в в таком элементе могут содержаться такие-то элементы, у него обязателен атрибут такой-то
(У элемента машины должно быть описано 4(и только 4!!!) элемента колеса, у колёс (непременно!) должны быть атрибуты радиус и ширина)

DTD - это отдельный файл или текст в том же файле что и хмл, который описывает эту структуру
типа....

Код

<?xml version="1.0" ?>
<!DOCTYPE customer-metadata[

                <!ELEMENT customer-metadata (category*)>
                 <!-- в корне документа может быть 0 или несколько вложенных элементов типа category -->


                <!ELEMENT category (category-attribute+) >
                 <!-- может быть 1 или несколько вложенных элементов типа category-attribute -->

                <!ATTLIST category  <!-- у категории такие атрибуты, причём обязательные -->
                        cat-name     CDATA #REQUIRED
                        cat-type       CDATA #REQUIRED
                        cat-description    CDATA #REQUIRED
                        >

                <!ELEMENT category-attribute EMPTY >
                 <!-- ну а этот элемент ничерта в себе не может содержать - так, просто чтоб был :) -->

] >

<customer-metadata>

   <!-- ну а тут погнал свой ксмл согласно вышеописанного :)-->

</customer-metadata>

потом парсишь

Код

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);  // ВКЛЮЧАЕШЬ АВТОПРОВЕРКУ ПО ТВОЕЙ DTD
docBuilder = factory.newDocumentBuilder();
document = docBuilder.parse(file);


Фот... вродь насоображал чёт перед уходом smile

И пробегись вот http://pyramidin.narod.ru/xml/xml1/index.htm.
Там конкретные руководства от создателей smile

Ну и спрашивай

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)