繁体   English   中英

java Component的getSize()返回负值

[英]java Component's getSize() returning negative values

我有一个有趣的情况,间歇性地从调用JLabel的方法getSize()得到负值。 我想调整JLabel的大小来抓住可能的最大空间,但我常常像这个问题一样颠倒它。 似乎在获得负值后立即获得正确的值。 我几乎可以肯定这是由我糟糕的GUI /逻辑线程架构引起的线程竞争问题,但是,我注意到如果我删除了我对父JPanel所做的这种解决方法,问题就会消失。

我已经尝试在进行值赋值时添加一个synchronized块,之前我做了jlabel.verify(),但没有任何帮助。 不幸的是,我真的需要保持我提到的解决方法。

我要感谢提前解决这个问题的任何指导。

这是一个截图:

http://i.stack.imgur.com/YAmTy.png

这种情况发生的唯一方法是,如果另一个进程正在更改分配时间componentWidth变量和读取其值的时间之间的jlabel。 可能的情况是jlabel的初始化发生在后台线程中,并且在分配componentWidth变量时未完成。

我不确定究竟是什么导致了这个问题,但我通过专门设置首选大小来解决它(请记住,我的大部分内容都返回0,0作为首选大小),之后我才调用:

setExtendedState( this.getExtendedState()|JFrame.MAXIMIZED_BOTH );

现在:

    setExtendedState( this.getExtendedState()|JFrame.MAXIMIZED_BOTH );
    setPreferredSize(getSize());

@Override
public void paint(Graphics g) {
    setPreferredSize(getSize()); // Update to current size
    super.paint(g);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM