请教,为什么为死循环?

朗晴 2012-05-17 03:56:16

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);
}
}
...全文
150 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
朗晴 2012-05-17
  • 打赏
  • 举报
回复
试着做个四个循环触发事件的,东南西北。
看看效果怎么样!
多谢xujinfu2和巴斯藤。

感谢有你们帮我解答!稍后结贴。
朗晴 2012-05-17
  • 打赏
  • 举报
回复
也许我称呼有错,这不叫死循环,但这代码的确是循环得,
我认为代码循环两次应该终止,没想到是不停得循环,
或许我开始理解了,不是代码循环而是事件监听器互相循环得,因为事件是来回触发。
我懂了。
huanghun4673 2012-05-17
  • 打赏
  • 举报
回复
这个跟循环没有关系,下面两种情况者真正的死循环。

while(true) {
your code...
}
或者
for(int i=0; i<1;) {
your code...
}

线程死锁问题也是一种与死循环类似的问题,不过它应该不属于死循环。
VanBaston 2012-05-17
  • 打赏
  • 举报
回复
比如说你开发了一个计算器,运行以后你可以一直计算,你会说这个计算器是在执行死循环吗?
huanghun4673 2012-05-17
  • 打赏
  • 举报
回复
7楼正解
huanghun4673 2012-05-17
  • 打赏
  • 举报
回复

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
}
}
朗晴 2012-05-17
  • 打赏
  • 举报
回复
这代码不是我写得,回复楼上:
VanBaston 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
回答楼上,不是程序停住了,也不是循环语句出现,更不是窗口关闭了,都不是。
你们都没有复制粘贴代码去看。

是当鼠标移到按钮上,面板上两个按钮交替显现,
造成这种现象的语句我已经标明,请问原理是什么。
[/Quote]

效果本来就是这样的啊

protected void processMouseMotionEvent(MouseEvent e)
{
setVisible(false);
MB.setVisible(true);
}
你鼠标移动到按钮后触发这个方法,这个方法的效果就是隐藏自己,显示自己指向的另一个按钮。
你在主函数中设置2个互为自己指向的对象,所以放到一个按钮上就会隐藏自己显示另一个,然后你在移动过去又是隐藏自己显示另一个,这个不是死循环,是你的操作触发的时间,你不移动鼠标去触发他是不会变。
如果是死循环的话他们应该是一直自己自动的变来变去的。
huanghun4673 2012-05-17
  • 打赏
  • 举报
回复
问题我大概了解了,心里也有数,我整理一下自己的思路,一会儿告诉你。先弱弱地问一句,哥们儿,这代码是你自己写的吗?
朗晴 2012-05-17
  • 打赏
  • 举报
回复
回答楼上,不是程序停住了,也不是循环语句出现,更不是窗口关闭了,都不是。
你们都没有复制粘贴代码去看。

是当鼠标移到按钮上,面板上两个按钮交替显现,
造成这种现象的语句我已经标明,请问原理是什么。
huanghun4673 2012-05-17
  • 打赏
  • 举报
回复
教你个办法,CTRL+C,把java杀掉。因为你没给窗口添加关闭的event监听,所以暂时是关不掉的。想要知道程序是不是执行到最后了,可以在“mb2.setfriend(mb1);”如果加上System.out.println("Mb2 has set a friend named mb1!");,希望对你有用。
paommmmm 2012-05-17
  • 打赏
  • 举报
回复
是窗口没法关闭??
ncist_jianeng 2012-05-17
  • 打赏
  • 举报
回复
没看到循环
qybao 2012-05-17
  • 打赏
  • 举报
回复
死循环?什么个现象?是程序停住了还是什么?
最近一直在研究爬虫和Lucene,虽然开始决定选用Heritrix来执行爬虫操作,但是后来发现用它来做还是存在一定的问题,比如需要程序生成相应的XML文件,对于同一个Job,怎样才能保证重复运行该Job时文件夹始终是同一个(Heritrix为Job创建文件夹的规则是“Job名称-时间戳”)等等,都是需要考虑的问题,最终还是将其搁浅。    后来google了一下,找到了一个简单爬虫的程序代码(http://www.blogjava.net/Jack2007/archive/2008/03/24/188138.html),随即试验了一下,发现确实能得到网页的内容,在这里还是要谢谢代码的提供者——Jack.Wang。    虽然试验成功,但是在随后的大数据量试验时,还是出现了问题。最初试验时,我只是让程序去抓取10个URL链接,当我将URL链接数改为100个时,问题出现了——URL中存在重复,而且非常容易的就变成死循环。举个例子来说,比如我首先爬的是A.html,在A.html中有两个链接:B.html,C.html,等爬完A.html以后,程序会爬B.html,这时如果B.html中的所有链接中有A.html这个页面的链接,那么程序又会去爬A.html这个页面,如此一来就形成了一个死循环,永远也不能停止。    跟踪程序发现,原来是在添加要抓取的网页的链接列表中,没有将已经抓取过的URL去除,所以才造成了死循环。现在虽然加上了这个判断,但是从我运行程序的效果来看,也不是很理想,总是感觉有些慢,800个页面要一两分钟才能爬完,这个我觉得有点说不过去。    这个产品,做到现在,我遇到了这么几个情况,有和大家分享的,也有向大家请教,求助的。    1.关于对应关系数据的保存方式    在创建索引的时候,需要将网页的URL和网页的内容传到相应的方法中,当然URL和内容是要对应的,也许是经验太少吧,我采取的是通过构建一个JavaBean的方式来传递的,不知道大家有没有更好的方法       2.关于要创建索引的内容的保存方式    最初的想法是不创建文件,直接将内容保存到变量中,然后创建索引,即先抓取网页的内容,然后将网页的内容和URL保存到自己构建的JavaBean对象中,接着将这个对象放到一个list列表中,等所有网页抓取完毕以后,将这个列表传到创建索引的方法中。这种做法看似不错,可是当URL数量很大时,会导致内存不够用,所以还是创建文件比较稳妥。    3.关于网页编码问题    遇到这个问题也是一个巧合,本来我抓取的是客户的一个网站,后来同事说如果客户看访问日志,这个月的数据会和平常的数据不一样,所以我就抓取公司的网站,结果,问题出现了。原先公司的网站是用GB2312编码做的页面,现在采用的是UTF-8的编码,虽然我已经判断了页面的编码,可是依然不能解决保存的文件中文乱码的问题,不知道大家有什么好办法没有。错误信息为:java.io.UnsupportedEncodingException    附件为爬虫代码 本文出自 “徘徊在c#,java,php之间” 博客,请务必保留此出处http://jerrysun.blog.51cto.com/745955/221879

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧