gpt4 book ai didi

java - 使用 SwingUtilities.invokeLater() 时保留实例变量值

转载 作者:太空宇宙 更新时间:2023-11-04 06:38:47 25 4
gpt4 key购买 nike

我在计时器上执行以下代码。我的问题是,在 run() 方法中的事件调度线程上调用 retrieveLineItemResultsFromPCS() 之前,实例变量 mLatestBilletShopOrderNummLatestBilletItemNum 的值是否会被最后两行代码覆盖?如果是这样,解决方法是什么?我是否应该在调用 SwingUtilities.invokeLater() 之前将这些实例变量的值复制到 final 局部变量,并将这些变量传递给 retrieveLineItemResultsFromPCS(),如代码示例 2 中所示?

if ( ( lShopOrderNum[ 0 ] != mLatestBilletShopOrderNum ) ||
( lItemNum[ 0 ] != mLatestBilletItemNum ) )
{
SwingUtilities.invokeLater( new Runnable() {
@Override
public void run()
{
retrieveLineItemResultsFromPCS( mLatestBilletShopOrderNum, mLatestBilletItemNum );
}
} );
}
mLatestBilletShopOrderNum = lShopOrderNum[ 0 ];
mLatestBilletItemNum = lItemNum[ 0 ];

代码示例 2:

if ( ( lShopOrderNum[ 0 ] != mLatestBilletShopOrderNum ) ||
( lItemNum[ 0 ] != mLatestBilletItemNum ) )
{
final int lBilletShopOrderNum= mLatestBilletShopOrderNum;
final int lBilletItemNum= mLatestBilletItemNum;
SwingUtilities.invokeLater( new Runnable() {
@Override
public void run()
{
retrieveLineItemResultsFromPCS( lBilletShopOrderNum, lBilletItemNum );
}
} );
}
mLatestBilletShopOrderNum = lShopOrderNum[ 0 ];
mLatestBilletItemNum = lItemNum[ 0 ];

最佳答案

您的Runnable匿名实例实现了run方法。仅当执行该 run 方法时,它才会读取成员变量 mLatestBilletShopOrderNum 和 mLatestBilletItemNum 的当前值,并执行方法retrieveLineItemResultsFromPCS。

因此,传递给 retrieveLineItemResultsFromPCS 的参数值取决于 run 方法的执行时间。

如果您需要 retrieveLineItemResultsFromPCS 不受最后两行的影响,则应使用第二种方法,即最终局部变量。

您可以通过将匿名实例保留在变量中并在更改实例变量之前和之后调用其 run 方法来向自己演示此行为:

...
Runnable runnable = new Runnable() {
@Override
public void run()
{
retrieveLineItemResultsFromPCS( mLatestBilletShopOrderNum, mLatestBilletItemNum );
}
}
runnable.run (); // will see the old values of mLatestBilletShopOrderNum and mLatestBilletItemNum
mLatestBilletShopOrderNum = lShopOrderNum[ 0 ];
mLatestBilletItemNum = lItemNum[ 0 ];
runnable.run (); // will see the new values of mLatestBilletShopOrderNum and mLatestBilletItemNum
...

关于java - 使用 SwingUtilities.invokeLater() 时保留实例变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24961677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com