2016-08-03 41 views
0

Ich habe versucht, ein Geschäft für mein Spiel zu machen. Dies war nicht erfolgreich.Wie kann ich diese NullPointerException beheben, wenn ich versuche, mit Graphics2D auf einem JPanel zu rendern?

Ich habe DrawComponent versucht, hat nicht funktioniert. Keine Fehler, Code ausgeführt, hat aber nicht funktioniert. Jetzt versuche ich zu tun:

private void render() { 
    Graphics2D g = (Graphics2D) graphics.getGraphics(); 

    ///////////////////// 
    g.drawImage(img, 0, 0, WIDTH, HEIGHT, null); 
    ///////////////////// 
    g.dispose(); 

    Graphics2D g2d = (Graphics2D) getGraphics(); 
    g2d.drawImage(img, 0, 0, null); 
    g2d.dispose(); 
} 

Jetzt bekomme ich eine Nullpointer auf g2d. Ich habe alles versucht.

Meine Ziele sind in der Lage, anklickbare Schaltflächen zu haben. Es hat funktioniert. Aber ich musste fast immer neu starten. Denn meistens wurde die Zeit bis zum Code nicht einmal ausgeführt. Also habe ich versucht es zu reparieren. Jetzt ist alles durcheinander.

Dies ist der Code dazu. (Doubleint ist ein Teil meiner Bibliothek ist es nichts mehr als nur x und y.)

public class Shop { 

    public BuildWindow window; 
    public static JWindow w; 

    private int WIDTH = 860, HEIGHT = 440; 

    private BufferedImage graphics = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); 

    public DrawPane drawPane; 

    public Shop() { 
     //window = new BuildWindow().setSize(new DoubleInt(100, 100)).at(wi, he).setTitle("Shop").setOpacity(1).setDragable(false).showEmpty(true); 
     w = new JWindow(); 
     w.setOpacity(1); 
     w.setSize(WIDTH, HEIGHT); 
     w.setLocation(800, 800); 
     w.setVisible(false); 
     w.setAlwaysOnTop(true); 
     //graphics = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); 

    } 

    private void createShop() { 
     /***Graphics2D g = (Graphics2D) graphics.getGraphics(); 
     g.setColor(Color.blue); 
     g.drawString("hey", WIDTH-50, HEIGHT-50); 
     g.fillRect(0, 0, WIDTH, HEIGHT);*/ 
    } 

    public class DrawPane extends JPanel { 

     int width = WIDTH; 
     int height = HEIGHT; 
     private ArrayList<Shape> buttons; 
     private Shape btn1 = new Rectangle2D.Double(20, 60, width/2, height-20); 
     private Shape btnClose = new Rectangle2D.Double(width-25, 5, 20, 20); 

     Point wCoords; 
     Point mCoords; 

     public DrawPane() { 
      buttons = new ArrayList<>(); 
      buttons.add(btn1); 
      buttons.add(btnClose); 
      addMouseListener(new MouseAdapter() { 
       @Override 
       public void mouseClicked(MouseEvent e) { 
        super.mouseClicked(e); 
        for(Shape s : buttons) { 
         if(s.contains(e.getPoint())) { 
          System.out.println("Clicked " + s.getBounds()); 
          if(s == btnClose) { 
           w.dispose(); 
          } 
         } 
        } 
       } 
       @Override 
       public void mousePressed(MouseEvent e) { 
        mCoords = e.getPoint(); 
       } 
       @Override 
       public void mouseReleased(MouseEvent arg0) { 
        mCoords = null; 
       } 
      }); 
      addMouseMotionListener(new MouseMotionAdapter() { 
       public void mouseDragged(MouseEvent e) { 
       wCoords = e.getLocationOnScreen(); 
       w.setLocation(wCoords.x - mCoords.x, wCoords.y - mCoords.y); 
       } 
      }); 
     } 

     void repaintThis() { 
      repaint(); 
     } 

     BufferedImage img = loadImageFrom.LoadImageFrom(Shop.class, "bar.png"); 

     Graphics gb; 

     /** 
     * super.paintComponent(g); 
      Graphics2D g2d = (Graphics2D) g; 
      g.setColor(Color.red); 
      //g.fillRect(0, 0, width, 50); 
      g.drawImage(img, 0, 0, width, 50, null); 
      g.setColor(Color.WHITE); 
      g.drawString("SHOP", 15, 30); 
      g.drawString("X", width-20, 20); 
      for(Shape b : buttons) { 
       g2d.draw(b); 
      } 
      System.out.println("Built"); 
      gb = g; 
     */ 

     private void render() { 
      Graphics2D g = (Graphics2D) graphics.getGraphics(); 

      ///////////////////// 
      g.drawImage(img, 0, 0, WIDTH, HEIGHT, null); 
      ///////////////////// 
      g.dispose(); 

      Graphics2D g2d = (Graphics2D) getGraphics(); 
      g2d.drawImage(img, 0, 0, null); 
      g2d.dispose(); 
     } 

     public void Build() { 
      Graphics g = gb; 
      Graphics2D g2d = (Graphics2D) g; 
      g.setColor(Color.red); 
      //g.fillRect(0, 0, width, 50); 
      g.drawImage(img, 0, 0, width, 50, null); 
      g.setColor(Color.WHITE); 
      g.drawString("SHOP", 15, 30); 
      g.drawString("X", width-20, 20); 
      for(Shape b : buttons) { 
       g2d.draw(b); 
      } 
      System.out.println("Built"); 
     } 

    } 

    public void render(Graphics2D g) { 
      drawPane.render(); 
    } 

    public void addDrawPane() { 
     drawPane = new DrawPane(); 
     w.add(drawPane); 
    } 
} 

Wenn Sie Zugang zu mehr Code benötigen, mich einfach fragen.

+0

Sieht aus wie 'grahpics' ist' null' –

+0

sollte nicht 'g' ein' Graphics' Objekt sein? –

+0

aktualisieren Sie Ihre Frage mit dem Code mit paintComponent() ok? –

Antwort

1

Sie sollten die paintcomponent Methode wie folgt außer Kraft setzen:

public class DrawPane extends JPanel { 

    // all your variables and other things 

    @Override 
    paintComponent(Graphics g) { 
    Graphics2D g2d = (Graphics2D) g; 
    // Your code goes here, use the g2d 

    } 

} 

dann, wenn Sie die Komponente neu streichen müssen, rufen Sie einfach repaint() auf sie.

+0

Ich habe schon beides gemacht. Repaint passiert, aber ich sehe immer noch nichts. Das ist komisch. Wahrscheinlich stimmt etwas nicht damit, dass Dinge zu früh oder zu spät angerufen werden. –