class Anim extends JFrame implements Runnable{
Image[] img=new Image[2];
int i=0;
Thread thread;

Anim(){
img[0]=new ImageIcon("d:\\Animator\\images\\Beans\\T1.gif").getImage();
img[1]=new ImageIcon("d:\\Animator\\images\\Beans\\T10.gif").getImage();

thread=new Thread(this);
thread.start(); this.pack();
this.setVisible(true);
}


public void paint(Graphics g){
System.out.println("The running thread:" + Thread.currentThread());
super.paint(g);
g.drawImage(img[(i++)%2],10,10,this);

try{
//if(Thread.currentThread()==thread)
thread.sleep(1000);//******
}catch(Exception e){
e.printStackTrace();
}
repaint();
}
public void run(){
System.out.println("The running thread:" + Thread.currentThread());
repaint();
}
public static void main(String[] args){
new Anim();
}
}
//为什么方法run中显示的当前线程跟paint()的当前线程不同,他们两个都在同一个类下的?
//高手,帮帮忙,要多少分都可以给

解决方案 »

  1.   

    你弄清楚了吗?
    paint方法中和run方法的执行根本就不在一个线程中!run()方法是你自己new的Thread
    而paint()方法的调用是java.awt.EventDispatchThread线程。谁也没有向你保证同一类下的方法一定是在同一线程下被调用。
      

  2.   

    xiaohaiz
    那么同一类下的不同方法又应该如何归属于哪些进程呢
      

  3.   

    下面给你做了一段示范代码,注意m1和m2这两个方法,都在同一类,但是分别被t1和t2这两个不同的线程调用。你好好体会一下。方法如何归属,完全是你的BUSINESS。
    <<
    public class TestThread extends TestCase {
        public TestThread(String name) {super(name);}
        private final Map results = new HashMap();    public void m1(String name) {results.put("m1", name);}
        public void m2(String name) {results.put("m2", name);}    public void testThread() {
            Thread t1 = new Thread(new InnerTestThread(1), "t1");
            Thread t2 = new Thread(new InnerTestThread(2), "t2");
            t1.start();
            t2.start();
            try{Thread.sleep(1000);}catch(InterruptedException ex){}        assertEquals(2, results.size());
            assertTrue(results.containsKey("m1"));
            assertTrue(results.containsKey("m2"));
            assertEquals("t1", results.get("m1"));
            assertEquals("t2", results.get("m2"));
        }    private class InnerTestThread implements Runnable {
            private final int c;
            InnerTestThread(int c) {
                this.c=c;
            }
            public void run() {
                String name= Thread.currentThread().getName();
                if(c==1) {m1(name);}
                else if(c==2) {m2(name);}
                else return;
            }
        }
    }
    >>
      

  4.   

    xiaohaiz:
    高手,帮帮忙,TestCase类没给出啊
      

  5.   

    @see www.junit.org
    JAVA的单元测试工具,现在最新版本是3.8.1。在CLASSPATH中加入junit.jar
      

  6.   

    如果有心在JAVA方面发展,这个工具是一定要掌握的。先看看它的文档。
    如果要在命令行运行刚才给你的代码,这样:
    +-------------------------------------------------------------------+
    | java -classpath PATH/junit.jar junit.testui.TestRunner TestThread |
    +-------------------------------------------------------------------+
      

  7.   

    不学会看E文,难道你觉得会有很大的进步吗?就靠在CSDN狂发帖子? :)
    其实你的知识还是要靠你自己去学习的。而最新的东西确实又往往都是E文的。
      

  8.   

    大侠指点,无以为报;
    小小分数,以表敬意!
    Thanks xiaohaiz