这是我的代码
//Sina.java
import javax.swing.*;
import java.awt.*;
public class Sina extends JPanel  implements Runnable
{
double end_x=0.0;
double end_y=0.0;
double start_x=0.0;
double start_y=0.0;
Thread one;
public Sina()
{
one=new Thread(this);
one.start();
}
public void run()
{
while(true)
{
start_x=end_x;
start_y=end_y;
end_x+=0.01;
double end_y=Math.sin(end_x);
repaint();

}
}
public void paint(Graphics g)
{
g.setColor(Color.black);
g.drawLine((int)start_x*100,(int)start_y*100,(int)end_x*100,(int)end_y*100);
}
public static void main(String args[])
{

JFrame jf=new JFrame();
jf.getContentPane().add(new Sina());
jf.setSize(300,300);
jf.setVisible(true);
}
}

我看过帮助文档,说 repaint()方法只有在系统当前任务结束时才用,我不用线程,的确能够画出两条线(这一点我实现了)但是我要如何才能得画出正弦线,请高后指点一二/如能解决,高分谢,,

解决方案 »

  1.   

    线程是正确的,但你的正弦线画得有些问题,你可以单步调试一下,end_x早就超出你的边界了。我把它注释掉,然后随便画条线就可以,代码在下面import javax.swing.*;
    import java.awt.*;
    public class Sina extends JPanel  implements Runnable
    {
            double end_x=2.0;
            double end_y=2.0;
            double start_x=2.0;
            double start_y=2.0;
            int x=100;
            Thread one;
            public Sina()
            {
                    one=new Thread(this);
                   one.start();
            }
            public void run()
            {
                    while(true)
                    {
                            start_x=end_x;
                            start_y=end_y;
                            end_x+=0.01;
                            double end_y=Math.sin(end_x);
                            repaint();                }
            }
            public void paint(Graphics g)
            {
              g.setColor(Color.red);
            //  g.drawLine((int)start_x*10,(int)start_y*10,(int)end_x*10,(int)end_y*10);
              x++;
              g.drawLine(10,10,100,x);
            }
            public static void main(String args[])
            {
                    JFrame jf=new JFrame();
                    jf.getContentPane().add(new Sina());
                    jf.setSize(500,500);
                    jf.setVisible(true);
            }
    }