Dominik S. created GROOVY-11112:
-----------------------------------
Summary: Calling SwingWorker publish() method aborts with
groovy.lang.MissingMethodException
Key: GROOVY-11112
URL: https://issues.apache.org/jira/browse/GROOVY-11112
Project: Groovy
Issue Type: Bug
Affects Versions: 3.0.15
Reporter: Dominik S.
Hello,
with Groovy 3.0.15 and Java *17* I get the following exception when I call a
SwingWorker publish() method
{code:java}
groovy.lang.MissingMethodException: No signature of method:
TestWorker2.publish() is applicable for argument types: (Integer) values: [0]
java.util.concurrent.ExecutionException: groovy.lang.MissingMethodException: No
signature of method: TestWorker2.publish() is applicable for argument types:
(Integer) values: [0]
at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
at java.desktop/javax.swing.SwingWorker.get(SwingWorker.java:613)
at java_util_concurrent_Future$get.callCurrent(Unknown Source)
at
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49)
at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:171)
at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:176)
at TestWorker2.done(TestWorker2.groovy:32)
at java.desktop/javax.swing.SwingWorker$5.run(SwingWorker.java:750)
at
java.desktop/javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.run(SwingWorker.java:848)
at
java.desktop/sun.swing.AccumulativeRunnable.run(AccumulativeRunnable.java:112)
at
java.desktop/javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.actionPerformed(SwingWorker.java:858)
at java.desktop/javax.swing.Timer.fireActionPerformed(Timer.java:311)
at java.desktop/javax.swing.Timer$DoPostEvent.run(Timer.java:243)
at
java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:771)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716)
at
java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at
java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:741)
at
java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at
java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at
java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at
java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at
java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at
java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: groovy.lang.MissingMethodException: No signature of method:
publish() is applicable for argument types: (Integer) values: [0]
at
org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:72)
at
org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:82)
at
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49)
at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:171)
at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:185)
at TestWorker2.doInBackground(TestWorker2.groovy:16)
at TestWorker2.doInBackground(TestWorker2.groovy)
at java.desktop/javax.swing.SwingWorker$1.call(SwingWorker.java:304)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.desktop/javax.swing.SwingWorker.run(SwingWorker.java:343)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833) {code}
The code example is the following:
TestWorker2Test.groovy
{code:java}
import java.awt.EventQueue
class TestWorker2Test {
static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
println "TestWorkerTest2"
TestWorker2 tw2 = new TestWorker2()
tw2.execute()
} catch (Exception e) {
e.printStackTrace();
}
}
})
}
}
{code}
TestWorker2.groovy
{code:java}
import javax.swing.SwingWorker
class TestWorker2 extends SwingWorker<Void, Integer> {
@Override
protected Void doInBackground() throws Exception {
for(int i=0; i<10; i++) {
publish(i)
}
return null
}
@Override
protected void process(List<Integer> chunks) {
// Get Info
for (Integer number : chunks) {
println"Execute 'process chunks' in TestWorker 2!
Number:$number"
}
}
@Override
protected void done() {
try {
get()
println "Background thread has been processed."
} catch (Exception ex) {
println "Error!"
println ex.getMessage()
ex.printStackTrace()
}
}
} {code}
When I run the above code with Groovy 3.0.15 and Java *11* everything works
fine, only after switching to Java *17* I get the above exception.
What has changed with Java 17 and how can I solve the problem? Thanks in
advance!
--
This message was sent by Atlassian Jira
(v8.20.10#820010)