Я пытаюсь сделать рекурсивную программу, которая рисует 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);
}
}
}
ваш объект graphics2D имеет значение null, и именно поэтому он не работает. Вам нужно пройти учебные руководства и научиться делать обычную роспись: http://www.mathcs.duq.edu/simon/Java6/uiswing/14painting/index.html – ControlAltDel
@ControlAltDel Java 6? – MadProgrammer
Взгляните на [Живопись в AWT и Swing] (http://www.oracle.com/technetwork/java/painting-140037.html) и [Выполнение пользовательской живописи] (http://docs.oracle.com/ javase/tutorial/uiswing/painting /) для получения дополнительной информации о том, как работает живопись в Swing/AWT – MadProgrammer