2015-10-27 2 views
-1

Я пытаюсь сделать рекурсивную программу, которая рисует Cosh Snowflake, но дает мне ошибку, когда я пытаюсь запустить ее. Очевидно, п равно нулю, даже если я инициализировать его:Нулевая ошибка при попытке нарисовать линию в JFrame

Line2D n = new Line2D.Double(x0,y0,x1,y1); 
     g2.draw(n); 

А вот полная программа:

import java.awt.*; 
import java.awt.geom.*; 
import javax.swing.*; 
    class turtle{ 
    double direction,x,y; 
    public turtle(double direction, double x, double y) 
    { 
     this.direction=0; 
     this.x=0; 
     this.y=0; 
    } 
    public void move(double length) 
    { 
     this.x=x+Math.sin(direction)*length; 
     this.y=y+Math.cos(direction)*length; 
    } 
    public void rotate(double angle) 
    { 
     this.direction=angle; 
    } 
} 
public class fractal extends JComponent 
{ 
    turtle t = new turtle(0,0,0); 
    Graphics2D g2; 
    public static void main(String [] args) 
{ 
    fractal p = new fractal(); 
    JPanel panel = new JPanel(); 
    p.fractal(300,3); 
    panel.add(p); 
    panel.setSize(900,900); 
    panel.setVisible(true); 
} 
public void fractal(double length,double depth) 
{ 
    if(depth==0) 
    { 
     double x0=t.x; 
     double y0=t.y; 
     t.move(length/4); 
     double x1=t.x; 
     double y1=t.y; 
     Line2D n = new Line2D.Double(x0,y0,x1,y1); 
     g2.draw(n); 
     x0=t.x; 
     y0=t.y; 
     t.rotate(60); 
     t.move(length/4); 
     x1=t.x; 
     y1=t.y; 
     g2.draw(new Line2D.Double(x0,y0,x1,y1)); 
     x0=t.x; 
     y0=t.y; 
     t.rotate(-60); 
     t.move(length/4); 
     x1=t.x; 
     y1=t.y; 
     g2.draw(new Line2D.Double(x0,y0,x1,y1)); 
     x0=t.x; 
     y0=t.y; 
     t.rotate(0); 
     t.move(length/4); 
     x1=t.x; 
     y1=t.y; 
     g2.draw(new Line2D.Double(x0,y0,x1,y1)); 
    } 
    else 
    { 
     fractal(length/4,depth-1); 
     g2.rotate(60); 
     fractal(length/4,depth-1); 
     g2.rotate(-60); 
     fractal(length/4,depth-1); 
     g2.rotate(0); 
     fractal(length/4,depth-1); 
    } 
} 
} 
+3

ваш объект graphics2D имеет значение null, и именно поэтому он не работает. Вам нужно пройти учебные руководства и научиться делать обычную роспись: http://www.mathcs.duq.edu/simon/Java6/uiswing/14painting/index.html – ControlAltDel

+0

@ControlAltDel Java 6? – MadProgrammer

+1

Взгляните на [Живопись в AWT и Swing] (http://www.oracle.com/technetwork/java/painting-140037.html) и [Выполнение пользовательской живописи] (http://docs.oracle.com/ javase/tutorial/uiswing/painting /) для получения дополнительной информации о том, как работает живопись в Swing/AWT – MadProgrammer

ответ

3

Graphics2D g2 является null. Обратите внимание на некоторые документы о чертеже JComponents, например. " Performing Custom Painting".

+0

Спасибо за ответ! – user5495415

Смежные вопросы