Frage

Ich versuche, etwas zu tun, das Problem auf die Spur, aber es gibt nicht viel kann ich bis paintContents tun, und alles sieht es mir durch den Debugger gut, aber ich werde überprüfen, um sicher, dass ich nichts übersehen haben . Zumindest würde Ich mag wissen, wie still zu handhaben dieses (wie sie zu kontrollieren und eine aussagekräftige Fehlermeldung ausgeben zu können, da, sobald sie geworfen hat, die GUI stottert und friert ein bisschen).

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at sun.java2d.pipe.DuctusShapeRenderer.renderPath(Unknown Source)
        at sun.java2d.pipe.DuctusShapeRenderer.draw(Unknown Source)
        at sun.java2d.pipe.PixelToParallelogramConverter.draw(Unknown Source)
        at sun.java2d.pipe.PixelToParallelogramConverter.draw(Unknown Source)
        at sun.java2d.SunGraphics2D.draw(Unknown Source)
        SNIP - MY CALL TO PAINT THE LAYER
        at com.jhlabs.map.layer.Layer.paintContents(Layer.java:70)
        at com.jhlabs.map.layer.Layer.paint(Layer.java:59)
        at com.jhlabs.map.layer.Layer.paintLayers(Layer.java:76)
        at com.jhlabs.map.layer.Layer.paintContents(Layer.java:68)
        at com.jhlabs.map.layer.Layer.paint(Layer.java:59)
        at com.jhlabs.Globe.paint(Globe.java:305)
        at javax.swing.JComponent.paintChildren(Unknown Source)
        at javax.swing.JComponent.paint(Unknown Source)
        at javax.swing.JComponent.paintToOffscreen(Unknown Source)
        at javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
        at javax.swing.RepaintManager.paint(Unknown Source)
        at javax.swing.JComponent._paintImmediately(Unknown Source)
        at javax.swing.JComponent.paintImmediately(Unknown Source)
        at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
        at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
        at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
        at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknow
n Source)
        at java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

Der folgende Quellcode ist von der Java Map Projection Bibliothek .

Layer.paintContents:

public void paintContents(MapGraphics g) {
    if (g != null) {
        paintLayers(g);
        paintFeatures(g);
        paintLayer(g);
    }
}

Layer.paint:

public void paint(MapGraphics g) {
    if (isVisible()) {
        Graphics2D g2d = g.getGraphics2D();
        AffineTransform saveTransform = g2d.getTransform();
        Composite saveComposite = g2d.getComposite();
        Projection saveProjection = g.getProjection();
        Style saveStyle = g.getStyle();
        if (composite != null)
        g2d.setComposite(composite);
        if (transform != null)
        g2d.transform(transform);
        if (style != null)
        g.setStyle(style);
        if (projection != null)
        g.setProjection(projection);
        paintContents(g);
        g.setStyle(saveStyle);
        g.setProjection(saveProjection);
        g2d.setComposite(saveComposite);
        g2d.setTransform(saveTransform);
    }
}

Layer.paintLayers:

public void paintLayers(MapGraphics g) {
for (Iterator<Layer> it = getLayersIterator(); it.hasNext();) {
    Layer l = (Layer) it.next();
    l.paint(g);
}
}

Globe.paint:

public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;

// Turn on antialiasing - otherwise it looks horrible
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

// Put the origin at bottom left
g2.translate(0, getHeight());
g2.scale(1, -1);

// Put the globe in the middle
g2.translate(getWidth() / 2, getHeight() / 2);

Point2D.Float p = new Point2D.Float(1, 0);
transform.deltaTransform(p, p);
float rscale = 1.0f / (float) Math.sqrt(p.x * p.x + p.y * p.y);
g2.setStroke(new BasicStroke(rscale * 0.5f));

MapGraphics mg = MapGraphics.getGraphics(g2, new Rectangle(getSize()));
seaLayer.setVisible(showSea);
tissotLayer.setVisible(showTissot);
worldLayer.setVisible(showWorld);
graticuleLayer.setVisible(showGraticule);
map.paint(mg);

if (showNight) {
    Color c = new Color(0, 0, 0, 0.5f);
    GeneralPath gc = new GeneralPath();
    ProjectionPainter.smallCircle(45, 5, 87, 180, gc, true);
    gc.closePath();
    ProjectionPainter pp = ProjectionPainter.getProjectionPainter(projection);
    pp.drawPath(g2, gc, null, c);

}

}
War es hilfreich?

Lösung

ich in Ihrem Stapel sehe verfolgt einen blendet Region durch die Linie definiert:

SNIP - MY CALL TO PAINT THE LAYER

Dieser Code ruft SunGraphics2D.draw(Shape). Ich habe nicht diesen Ruf in den Code sehen, dass Sie in bearbeitet haben. Allerdings sieht es so aus, als ob die Shape, die Sie in SunGraphics2D.draw() sind vorbei ist null.

Andere Tipps

Es bedeutet, dass, während eine Ereignisbehandlung (wie ein Repaint in diesem Fall sieht) eine Nullpointer geworfen wurde. Das heißt, Sie haben versucht, eine Methode für ein Objekt aufrufen, und es stellte sich heraus, null zu sein.

Etwas auf der Leitung 70 in den paintContents () -Methode der com.jhlabs.map.layer.Layer Klasse hat eine Null-Referenz.

Ich weiß nicht, was Sie verwenden, IDE, aber in Eclipse können Sie den Debugger sagen bei specifiv Arten von Ausnahmen zu brechen, z.B. NPE.

Sie können Ihre App in Debugmodus laufen mit dieser Option eingeschaltet und versuchen, den Fehler zu reproduzieren, so dass Sie in Ihrem Debugger zu überprüfen, was falsch ist.

Überprüfen Sie, ob der Quellcode der Sonne lib verfügbar ist. Wenn ja: Instruieren debuger Sie die Ausführung zu halten, wenn ein NPE geworfen wird. Dann können Sie das Objekt überprüfen, die null ist und erraten (oder Rückzieher), welches Objekt in dieser Referenz sollte

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top