VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 829|回复: 5

请高手帮我分析一下,下面这段程序为什么会进入死循环?

[复制链接]

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-2-13 18:00:02 | 显示全部楼层 |阅读模式
请高手帮我分析一下,下面这段程序为什么会进入死循环?
mainPanel.addComponentListener(new ComponentAdapter() {
      public void componentResized(ComponentEvent e) {
        Dimension d = mainPanel.getPreferredSize();
        if (d.width < 200) {
          mainPanel.setSize(200, d.height);
        }
        if (d.height < 400) {
          mainPanel.setSize(d.width, 400);
        }
      }
    });
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-4-13 14:45:01 | 显示全部楼层
每次调整大小 都会触发componentResized
而componentResized又会调整大小
那肯定会产生死循环
回复

使用道具 举报

0

主题

2

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-4-14 14:45:01 | 显示全部楼层
是不是mainPanel.setSize(200, d.height)又触发了componentResize事件,
无限循环下去了?!
回复

使用道具 举报

0

主题

2

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-4-14 15:00:02 | 显示全部楼层
是不是mainPanel.setSize()又触发了componentResize事件,
无限循环下去了?!
回复

使用道具 举报

1

主题

51

帖子

32.00

积分

新手上路

Rank: 1

积分
32.00
发表于 2020-4-18 14:45:01 | 显示全部楼层
...哪里有循环?
if (d.width < 200) {
          mainPanel.setSize(200, d.height);
        }
        if (d.height < 400) {
如果d.width>200&&d.height>400呢?
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-4-29 15:15:02 | 显示全部楼层
问题已经找到:主要是这两句话引起的
Dimension d = mainPanel.getPreferredSize();

mainPanel.setSize(d.width, 400);
很多情况下:
  preferredSize<<size
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表