tutorials icon indicating copy to clipboard operation
tutorials copied to clipboard

Invalid service: net.imagej.legacy.LegacyService

Open MurphyHou123 opened this issue 2 years ago • 1 comments

It can't run with error for all demos: Exception in thread "main" java.lang.IllegalArgumentException: Invalid service: net.imagej.legacy.LegacyService at org.scijava.service.ServiceHelper.createExactService(ServiceHelper.java:278) at org.scijava.service.ServiceHelper.loadService(ServiceHelper.java:229) at org.scijava.service.ServiceHelper.loadService(ServiceHelper.java:192) at org.scijava.service.ServiceHelper.loadServices(ServiceHelper.java:164) at org.scijava.Context.(Context.java:285) at org.scijava.Context.(Context.java:234) at org.scijava.Context.(Context.java:174) at org.scijava.Context.(Context.java:160) at net.imagej.ImageJ.(ImageJ.java:75) at SwingExample.main(SwingExample.java:20) Caused by: java.lang.ExceptionInInitializerError at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method) at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1160) at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.ensureClassInitialized(MethodHandleAccessorFactory.java:300) at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.newConstructorAccessor(MethodHandleAccessorFactory.java:103) at java.base/jdk.internal.reflect.ReflectionFactory.newConstructorAccessor(ReflectionFactory.java:200) at java.base/java.lang.reflect.Constructor.acquireConstructorAccessor(Constructor.java:547) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:497) at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128) at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:304) at java.base/java.lang.Class.newInstance(Class.java:685) at org.scijava.service.ServiceHelper.createServiceRecursively(ServiceHelper.java:300) at org.scijava.service.ServiceHelper.createExactService(ServiceHelper.java:267) ... 9 more Caused by: java.lang.RuntimeException: No _hooks field found in ij.IJ It appears that this class was already defined in the class loader! Please make sure that you initialize the LegacyService before using any ImageJ 1.x class. You can do that by adding this static initializer:

static {
	LegacyInjector.preinit();
}

I tried to add LegacyInjector.preinit(); but still failed.

MurphyHou123 avatar Nov 24 '23 00:11 MurphyHou123

@MurphyHou123 Have you tried a 1.8 JDK?

sean-leichtle avatar May 26 '24 18:05 sean-leichtle

@MurphyHou123 I second what @sean-leichtle suggests, to use OpenJDK 8. The new module system in Java 9 was tightened up in Java 17+ to make imagej-legacy's job of patching the original ImageJ more difficult.

Alternately, if you really need to use Java 17+, you can try launching with --add-opens=java.base/java.lang=ALL-UNNAMED passed to the JVM.

ctrueden avatar Nov 21 '24 21:11 ctrueden