debugging 价值从何而来?

ih99xse1  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(172)

我很难理解某个值的来源,它在Java库的BorderLayout类中。
有以下代码:

if ((c=getChild(NORTH,ltr)) != null) {
    c.setSize(right - left, c.height);
    Dimension d = c.getPreferredSize();
    c.setBounds(left, top, right - left, d.height);
    top += d.height + vgap;
}

我正在使用Eclipse。它的调试器告诉我“c.height”等于0。我认为这很奇怪,因为几行之后“d.height”的值大于900。
然后我得到了一个条件断点,当d.height〉900时,它会暂停执行。这个断点在c.setBounds(left, top, right - left, d.height);行中有效,但我在c.getPreferredSize();方法中也得到了一个条件断点,它具有相同的条件,但什么也没有发生。
下面是www.example.com的代码Component.java,其中包含“getPreferredSize()”方法:

@Deprecated
public Dimension preferredSize() {
    /* Avoid grabbing the lock if a reasonable cached size value
     * is available.
     */
    Dimension dim = prefSize;
    if (dim == null || !(isPreferredSizeSet() || isValid())) {
        synchronized (getTreeLock()) {
            prefSize = (peer != null) ?
                peer.getPreferredSize() :
                getMinimumSize();
            dim = prefSize;
        }
    }
    return new Dimension(dim);
}

所以我问自己:这个价值从何而来?
我希望在getPreferredSize()方法中赋值,但是其中的条件断点不会挂起线程,尽管它与BorderLayout类中的另一个条件断点具有相同的条件。

wtzytmuj

wtzytmuj1#

现在我知道问题所在了,调试器让我想到,类“www.example.com“中的“getPreferredSize”方法Component.java计算值,因为示例的类型是Component。
事实上,来自类“www.example.com“的方法Container.java是负责的,因为它覆盖了组件的方法。
但是谢谢你阅读我的文字!

相关问题