gpt4 book ai didi

java - 为什么invokeLater在主线程中执行?

转载 作者:IT老高 更新时间:2023-10-28 20:24:49 25 4
gpt4 key购买 nike

我刚刚遇到了这个“错误”,但我不确定这是否是有意的:代码:

public static Object someMethod(){
assert SwingUtilities.isEventDispatchThread();
return new Object();
}

public static void main(String[] args){
SwingUtilities.invokeLater(() -> someMethod().toString());//First Example
SwingUtilities.invokeLater(someMethod()::toString);//Second Example
}

在第一个示例中,someMethod 是在 swing 线程上执行的,但在第二个示例中不是,尽管我认为应该如此。

这是一个错误还是有意为之?

最佳答案

对我来说,这似乎是对你的误解

第一行就像是在说:“好的,Swing,我希望你 invokeLatersomeMethod().toString()”。所以 Swing 执行它

第二行就像在说:“好吧,Swing,我要你invokeLater是方法返回的对象的方法toString() >someMethod()”。 我现在正在执行的 someMethod() 方法

所以结果对我来说完全合乎逻辑

请记住,在评估函数之前(在本例中为 invokeLater)Java 需要评估所有参数。所以在第一种情况下,Java 评估一个 lambda 函数(不需要执行它),在第二种情况下,它遇到一个方法调用所以它需要执行它

关于java - 为什么invokeLater在主线程中执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44543465/

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