Hi Mark,
thanks a lot, setting CLASSPATH did the trick, after I removed the
unnecessary lines. I didn't understand them anyway, I was just parroting
http://fiji.sc/ImgLib2_Examples.
Now it sort of works, but I still don't see the image. I get an icon
with the Java guy on the launcher bar, with the image name and "(V)
(3.1%)". If I click that, all other windows disappear and there a small
stick-like artefact on the top of the screen, but nothing more.
Good progress anyway, more tomorrow.
Harri
On 26/02/14 16:41, Mark Hiner wrote:
Hi Harri,
java.lang.
IllegalArgumentException: java.lang.IllegalArgumentException: No
compatible service: io.scif.SCIFIOService
hajaalin@biotek973:~/Software/
mvn-IJ2$ jar tvf target/dependency/scifio-0.9.2.jar |grep
SCIFIOService
150 Fri Feb 14 16:24:24 EET 2014 io/scif/SCIFIOService.class
So this exception may be slightly misleading. SCIFIOService is a
marker interface for all the services that are part of SCIFIO. When an
org.scijava.Context is initialized as it is here, it's typically given
a set of base service interfaces and then loads all implementations of
that service. So it seems like the Context knows about the
SCIFIOService interface, but didn't discover any implementations
(things like DefaultFormatService, DefaultImgUtilityService).
So this brings me to my next point: I think there is either a) a bug
in jython where annotations are not preserved or b) a bug with the
class loading logic used by Fiji/IJ2. I am leaning towards a) right now.
I am using an Ubuntu 12.04 64-bit VM. I installed Jython 2.5.3, but I
suspect you can get this working with 2.5.1.
Anyway, I went back to OSX and tested jython with the -Dpython.path
option, and got the same missing service exception. But! If I set
$CLASSPATH (java automatically picks up the $CLASSPATH environment
variable) and run the equivalent of:
jython macros/imglib0.py /home/hajaalin/Data/Misha/composite1.ome.tif
it works! Thus I believe that python.path has a bug and although
jython supports discovery of classes on python.path, it does not
preserve their annotations (or some similar metadata is being lost).
So instead of setting CP and passing it via -Dpython.path, just use:
export CLASSPATH=`find
/home/hajaalin/Software/fiji-20140219/Fiji.app/jars -name '*.jar' |sed
':a;N;$!ba;s/\n/:/g'`
A simple rule of thumb is, try running a random SCIFIO class like
"java io.scif.SCIFIOService" from the command line. If you get a
NoClassDef error, your CLASSPATH is not configured correctly. If you
get a "NoSuchMethodError: main", your CLASSPATH is correct and your
jython will pick up all the desired classes.
Moving on...
jython macros/imglib0.py /home/hajaalin/Data/Misha/composite1.ome.tif
^ That then works a bit better with my CLASSPATH set, except I get a
different runtime error about how ImgMode.CELL can't be coerced to
ImgMode. (same error I get when running using Fiji).
I notice that you aren't actually using the SCIFIOConfig you
construct, so if you delete those lines and I'm finally able to open
an image. The SCIFIOConfig isn't strictly necessary either - SCIFIO
will open it as a CellImg automatically if it needs to. I will try to
investigate further as to how to get the types working for a nested
enum in jython..
You may see yet another error message about
io.scif.bf.BioFormatsFormat failing. This is because some jars in Fiji
are out of date, but that shouldn't cause catastrophic failure (it
just means that some proprietary formats won't be supported right
now). These jars should be updated this week.
I hope this helps. Let me know if you can't get this working on your end.
- Mark
--
__________________________________________________
Harri Jäälinoja
Light Microscopy Unit
Institute of Biotechnology, University of Helsinki
http://www.biocenter.helsinki.fi/bi/lmu/
+358 9 191 59370 fax +358 9 191 59366
_______________________________________________
ImageJ-devel mailing list
ImageJ-devel@imagej.net
http://imagej.net/mailman/listinfo/imagej-devel