我只是遇到了这个“错误”,但我不知道这是否意: 代码:为什么invokeLater在主线程中执行?
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线程执行,但在第二个例子中它不是,虽然它应该在我看来。
这是一个错误还是这是打算?
它看起来像方法引用需要适当的对象或类作为第一个参数,而不是某种方式来获取它,所以方法在主线程中调用,断言断言。没有声明方法的结果将被用于创建'methodResult :: toString',这相当于'() - > methodResult.toString()'。 – Pshemo
错误在哪里?在第二次调用中,'someMethod()'本身在'main'主体(因此在'main'线程)中被计算,然后,对结果对象的'toString'方法的引用被传递给'invokeLater '。 – RealSkeptic
另请参见[什么是'System.out :: println'的等效lambda表达式](https://stackoverflow.com/a/28025717/2711488)... – Holger