import java.awt.*;
import java.awt.event.*;public class MyButton extends Button
{
private MyButton MB=null;
public MyButton()
{
enableEvents(AWTEvent.MOUSE_MOTION_EVENT_MASK);
}
public void setfriend(MyButton MB)
{
this.MB=MB;
}
protected void processMouseMotionEvent(MouseEvent e)
{
setVisible(false);
MB.setVisible(true);
}
}
import java.awt.*;
import java.awt.event.*;public class TestMyButton extends Frame
{
public static void main(String []args)
{
TestMyButton tmb=new TestMyButton();
MyButton mb1=new MyButton();
MyButton mb2=new MyButton();

tmb.add(mb1,"North");
tmb.add(mb2,"South");
tmb.setSize(400,400);
tmb.setVisible(true);
mb1.setfriend(mb2);//谁能给讲解下,此处为什么为死循环;
mb2.setfriend(mb1);//谁能给讲解下,此处为什么为死循环;
mb2.setVisible(false);
}
}

解决方案 »

  1.   

    教你个办法,CTRL+C,把java杀掉。因为你没给窗口添加关闭的event监听,所以暂时是关不掉的。想要知道程序是不是执行到最后了,可以在“mb2.setfriend(mb1);”如果加上System.out.println("Mb2 has set a friend named mb1!");,希望对你有用。
      

  2.   


    效果本来就是这样的啊   protected void processMouseMotionEvent(MouseEvent e)
        {
            setVisible(false);
            MB.setVisible(true);
        }
    你鼠标移动到按钮后触发这个方法,这个方法的效果就是隐藏自己,显示自己指向的另一个按钮。
    你在主函数中设置2个互为自己指向的对象,所以放到一个按钮上就会隐藏自己显示另一个,然后你在移动过去又是隐藏自己显示另一个,这个不是死循环,是你的操作触发的时间,你不移动鼠标去触发他是不会变。
    如果是死循环的话他们应该是一直自己自动的变来变去的。
      

  3.   


    public class MyButton extends Button
    {
        private MyButton MB=null;
        public MyButton()
        {
            enableEvents(AWTEvent.MOUSE_MOTION_EVENT_MASK);
        }
        public void setfriend(MyButton MB)
        {
            this.MB=MB;
        }

    /*
    * 这个方法是给自身添加Mouse事件监听,
    * 当鼠标移动到当前Button时,隐藏自己,同时显示自己的内部所包含的那个Button
    * 也就是在TestMyButton中的friend
    */
        protected void processMouseMotionEvent(MouseEvent e)
        {
            setVisible(false); //隐藏自己
            MB.setVisible(true); //显示自己的内部所包含的那个Button
        }
    }
      

  4.   

    这个跟循环没有关系,下面两种情况者真正的死循环。while(true) {
    your code...
    }
    或者
    for(int i=0; i<1;) {
    your code...
    }线程死锁问题也是一种与死循环类似的问题,不过它应该不属于死循环。
      

  5.   

    试着做个四个循环触发事件的,东南西北。
    看看效果怎么样!
    多谢xujinfu2和巴斯藤。感谢有你们帮我解答!稍后结贴。