【问题标题】:Fiji(ImageJ) takes too long to load (on linux), together with a lengthy error messageFiji(ImageJ) 加载时间过长(在 linux 上),以及冗长的错误消息
【发布时间】:2017-03-27 12:31:01
【问题描述】:

我在 linux 上(在虚拟机中)从命令行使用 Fiji。 具体来说,我有一个调用许多斐济宏的 python 脚本。 每次斐济加载大约需要一分钟,使其成为该过程的瓶颈并大大减慢了我的速度。

我想知道这是否正常。斐济可以更快地加载吗? Fiji 在调用时也会输出一条冗长的错误消息。不知是否与加载时间过长有关。

我用来调用它的命令(例如)

//shared_directory/projects/Fiji.app/ImageJ-linux64 --headless 
-macro //shared_directory/projects/retracted/fiji_scripts/patch_cropper.txt

报错信息如下

java.awt.HeadlessException
        at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:204)
        at java.awt.Window.<init>(Window.java:536)
        at java.awt.Frame.<init>(Frame.java:420)
        at ij.plugin.frame.PlugInFrame.<init>(PlugInFrame.java:13)
        at ij.plugin.frame.RoiManager.<init>(RoiManager.java:94)
        at ij.macro.Interpreter.getBatchModeRoiManager(Interpreter.java:1875)
        at ij.plugin.frame.RoiManager.getInstance(RoiManager.java:1795)
        at ij.ImagePlus.deleteRoi(ImagePlus.java:1735)
        at ij.ImagePlus.close(ImagePlus.java:391)
        at ij.plugin.Commands.closeImage(Commands.java:136)
        at ij.plugin.Commands.close(Commands.java:83)
        at ij.plugin.Commands.run(Commands.java:29)
        at ij.IJ.runPlugIn(IJ.java:187)
        at ij.Executer.runCommand(Executer.java:137)
        at ij.Executer.run(Executer.java:66)
        at ij.IJ.run(IJ.java:297)
        at ij.IJ.run(IJ.java:272)
        at ij.macro.Functions.doRun(Functions.java:603)
        at ij.macro.Functions.doFunction(Functions.java:96)
        at ij.macro.Interpreter.doStatement(Interpreter.java:230)
        at ij.macro.Interpreter.doStatements(Interpreter.java:218)
        at ij.macro.Interpreter.run(Interpreter.java:115)
        at ij.macro.Interpreter.run(Interpreter.java:85)
        at ij.macro.Interpreter.run(Interpreter.java:96)
        at ij.plugin.Macro_Runner.runMacro(Macro_Runner.java:155)
        at ij.plugin.Macro_Runner.runMacroFile(Macro_Runner.java:139)
        at ij.IJ.runMacroFile(IJ.java:148)
        at net.imagej.legacy.IJ1Helper$4.call(IJ1Helper.java:1056)
        at net.imagej.legacy.IJ1Helper$4.call(IJ1Helper.java:1052)
        at net.imagej.legacy.IJ1Helper.runMacroFriendly(IJ1Helper.java:986)
        at net.imagej.legacy.IJ1Helper.runMacroFile(IJ1Helper.java:1052)
        at net.imagej.legacy.LegacyCommandline$Macro.handle(LegacyCommandline.java:188)
        at org.scijava.console.DefaultConsoleService.processArgs(DefaultConsoleService.java:102)
        at net.imagej.legacy.LegacyConsoleService.processArgs(LegacyConsoleService.java:81)
        at org.scijava.AbstractGateway.launch(AbstractGateway.java:95)
        at net.imagej.Main.launch(Main.java:62)
        at net.imagej.Main.main(Main.java:68)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at net.imagej.launcher.ClassLauncher.launch(ClassLauncher.java:279)
        at net.imagej.launcher.ClassLauncher.run(ClassLauncher.java:186)
        at net.imagej.launcher.ClassLauncher.main(ClassLauncher.java:77)

Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: Using incremental CMS is deprecated and will likely be removed in a future release
java.lang.IllegalArgumentException: Cannot handle app name in ij.gui.YesNoCancelDialog's public <init>(java.awt.Frame parent, java.lang.String title, java.lang.String msg)
        at net.imagej.patcher.CodeHacker.replaceAppNameInCall(CodeHacker.java:446)
        at net.imagej.patcher.LegacyExtensions.insertAppNameHooks(LegacyExtensions.java:419)
        at net.imagej.patcher.LegacyExtensions.injectHooks(LegacyExtensions.java:291)
        at net.imagej.patcher.LegacyInjector.inject(LegacyInjector.java:308)
        at net.imagej.patcher.LegacyInjector.injectHooks(LegacyInjector.java:109)
        at net.imagej.patcher.LegacyEnvironment.initialize(LegacyEnvironment.java:101)
        at net.imagej.patcher.LegacyEnvironment.applyPatches(LegacyEnvironment.java:495)
        at net.imagej.patcher.LegacyInjector.preinit(LegacyInjector.java:397)
        at net.imagej.patcher.LegacyInjector.preinit(LegacyInjector.java:376)
        at net.imagej.legacy.LegacyService.<clinit>(LegacyService.java:134)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
        at java.lang.Class.newInstance(Class.java:442)
        at org.scijava.service.ServiceHelper.createServiceRecursively(ServiceHelper.java:302)
        at org.scijava.service.ServiceHelper.createExactService(ServiceHelper.java:269)
        at org.scijava.service.ServiceHelper.loadService(ServiceHelper.java:231)
        at org.scijava.service.ServiceHelper.createServiceRecursively(ServiceHelper.java:340)
        at org.scijava.service.ServiceHelper.createExactService(ServiceHelper.java:269)
        at org.scijava.service.ServiceHelper.loadService(ServiceHelper.java:231)
        at org.scijava.service.ServiceHelper.loadService(ServiceHelper.java:194)
        at org.scijava.service.ServiceHelper.loadServices(ServiceHelper.java:166)
        at org.scijava.Context.<init>(Context.java:278)
        at org.scijava.Context.<init>(Context.java:234)
        at org.scijava.Context.<init>(Context.java:174)
        at org.scijava.Context.<init>(Context.java:160)
        at net.imagej.ImageJ.<init>(ImageJ.java:77)
        at net.imagej.Main.launch(Main.java:61)
        at net.imagej.Main.main(Main.java:68)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at net.imagej.launcher.ClassLauncher.launch(ClassLauncher.java:279)
        at net.imagej.launcher.ClassLauncher.run(ClassLauncher.java:186)
        at net.imagej.launcher.ClassLauncher.main(ClassLauncher.java:77)
Caused by: javassist.CannotCompileException: No code replaced!
        at net.imagej.patcher.CodeHacker$EagerExprEditor.instrument(CodeHacker.java:1280)
        at net.imagej.patcher.CodeHacker.replaceAppNameInCall(CodeHacker.java:443)
        ... 36 more

谢谢!

【问题讨论】:

    标签: linux virtual-machine virtualbox imagej


    【解决方案1】:

    我想知道这是否正常。斐济能否加快加载速度?

    我认为这不是预期的行为。由于这个问题是 ImageJ/Fiji 特有的,您最好在 ImageJ forum 上提出这一点。

    java.lang.IllegalArgumentException: Cannot handle app name in ij.gui.YesNoCancelDialog's public &lt;init&gt;(java.awt.Frame parent, java.lang.String title, java.lang.String msg)

    这可能是因为 ij1-patcher 没有处理 ij.gui.YesNoCancelDialog 以使其独立于 Java AWT 框架(这会干扰无头运行的目标)。

    欢迎您向ij1-patcher project 提交补丁,使其以与当前处理GenericDialog 类似的方式处理YesNoCancelDialog,请参阅these lines

    作为一种解决方法,只需使用不使用 YesNoCancelDialog 的宏,即不运行 getBoolean() macro function

    编辑:正如ImageJ forum topic 中所述,已提交补丁here

    在合并和发布之前,您可以使用 Help > Update ImageJ...

    通过降级 ij.jar 来解决此问题

    【讨论】:

    • 谢谢。我担心我不明白你的解决方法。我编写了我运行的宏,并且(据我所知)我没有在其中使用YesNoCancelDialog。事实上,我也得到了这个错误,没有调用任何宏://shared_directory/projects/Fiji.app/ImageJ-linux64 --headless -macro
    • 正如你现在发布的the same question on the ImageJ forum,让我们继续那边的讨论。
    猜你喜欢
    • 2016-10-02
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 2012-08-23
    相关资源
    最近更新 更多