当前位置: 代码迷 >> Java相关 >> 基础的线程问题~
  详细解决方案

基础的线程问题~

热度:171   发布时间:2007-01-18 23:27:40.0
基础的线程问题~

小弟今天刚接触多线程~因为太笨了~想了3个多小时还是没搞明白~
那未前辈有时间看下下面的代码~用线程实现眨眼睛。在这先谢谢了~~
import java.awt.*;
import javax.swing.*;


class Sle extends JFrame
{
JLabel jla = new JLabel();
public Sle()
{

super("娃娃");
this.setSize(400,300);
this.setVisible(true);
}

public void paint(Graphics g)
{
super.paint(g);
g.setColor(Color.BLUE);
g.fillOval(100,50,200,220);

g.setColor(Color.white);
g.fillOval(130,120,55,15);


g.setColor(Color.white);
g.fillOval(200,120,55,15);

g.setColor(Color.white);
g.fillOval(175,200,30,30);

g.setColor(Color.black);
g.fillOval(150,121,10,10);

g.setColor(Color.black);
g.fillOval(220,121,10,10);


g.setColor(Color.black);
g.drawLine(130,110,180,110);
g.drawLine(210,110,260,110);
g.drawLine(190,130,180,180);
g.drawLine(180,180,200,180);


}


public static void main(String [] args)
{
Sle ss = new Sle();
}
}


搜索更多相关的解决方案: 眼睛  public  import  super  

----------------解决方案--------------------------------------------------------

起一个线程去实现一个标量,然后在paint里面去根据标量画不同的画,这样就实现了动画的效果

不过,推荐使用paintComponent方法来画图,写一个继承自JPanel的类,它画出来的不会闪烁

然后再把JPanel加入到JFrame中去


----------------解决方案--------------------------------------------------------
标量?能解释一下吗?
----------------解决方案--------------------------------------------------------
比如一个boolean


你用线程去定时更改它,有时为true,有时为false

然后你在画的时候就判断,当为true时怎么画,当为false时怎么画

当然你也可以做其它的值做标量,比如,int值,定义了几个数字,比如123,为1时画什么,为2时画什么,为3时画什么,

123的值由线程来改,由paintComponent方法来取,

懂了不
----------------解决方案--------------------------------------------------------
嗯~~明白了~谢谢
我最开始想的是用fro循环
for(int i = 1;i<=1000000;i++)
{
if(i%2 ==1)
{

}
else
{


}
----------------解决方案--------------------------------------------------------

不是用循环,那样不会实现的
我帮你简单的改了一下,你看看吧
[CODE]import java.awt.*;
import javax.swing.*;

public class Sle extends JPanel implements Runnable {
private volatile boolean open;//此标量由线程去修改,由paintComponent方法去取得
public Sle() {
initWindow();
}
private void initWindow(){
JFrame jf=new JFrame("画人");
jf.add(this,BorderLayout.CENTER);
jf.setSize(400,400);
jf.setLocationRelativeTo(null);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
new Thread(this).start();
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLUE);
g.fillOval(100,50,200,220);
if(open){
g.setColor(Color.white);
g.fillOval(130,120,55,15);
g.setColor(Color.white);
g.fillOval(200,120,55,15);
g.setColor(Color.white);
g.fillOval(175,200,30,30);
} else{
g.setColor(Color.RED);
g.fillOval(130,120,55,15);
g.setColor(Color.RED);
g.fillOval(200,120,55,15);
g.setColor(Color.white);
g.fillOval(175,200,30,10);
}
g.setColor(Color.black);
g.fillOval(150,121,10,10);

g.setColor(Color.black);
g.fillOval(220,121,10,10);

g.setColor(Color.black);
g.drawLine(130,110,180,110);
g.drawLine(210,110,260,110);
g.drawLine(190,130,180,180);
g.drawLine(180,180,200,180);
}
public static void main(String [] args) {
Sle ss = new Sle();
}
public void run() {
while(true){
try{
Thread.sleep(1000);
open=!open;
repaint();
} catch(Exception exe){
exe.printStackTrace();
}
}
}
}[/CODE]


----------------解决方案--------------------------------------------------------
虽然不自己没有写出来~
但还是学到了很多东西~看了你写的程序~在查了一下API就明白了


十分感谢冰封版主~~
----------------解决方案--------------------------------------------------------
  相关解决方案