【问题标题】:imageJ plugin argumentimageJ 插件参数
【发布时间】:2014-03-14 14:15:18
【问题描述】:

您好,我正在尝试将参数传递给我的 ImageJ 插件。但是,无论我传递什么,程序似乎都将参数字符串视为空。我在互联网上找不到任何关于该问题的文档。

我的 Java 插件看起来像这样,并且可以正常编译。

import ij.plugin.PlugIn;

public class Test implements PlugIn {
    public void run(String args) {

        IJ.log("Starting plugin Test");
        IJ.log("args: ." + args + ".");

    }
 }

我编译、制作一个 .jar 文件并将其放入 ImageJ 插件文件夹中。 我可以用 ImageJ userInterface (Plugin>Segmentation>Test) 调用它,宏记录器将使用的命令:

run("Test");

然后我的代码执行完毕,按预期弹出日志窗口:

Starting plugin Test
args: ..

我可以在 .ijm 文件中手动运行相同的命令,并获得相同的结果。 但是,当我运行以下宏命令时:

run("Test", "my_string");

我在日志窗口中得到相同的结果:

Starting plugin Test
args: ..  //  <- I would like to get "my_string" passed there 

它应该显示的位置(至少我期望它做的)

Starting plugin Test
args: .my_string. 

所以我的问题是:如何将参数传递给插件,尤其是如何访问它们? 非常感谢


编辑


嘿,我找到了绕过它的方法:

使用 Macro.getOptions() :此方法将检索传递给插件的参数的字符串。 但是,我仍然找不到传递超过 1 个字符串参数的方法。我尝试重载 PlugIn.run() 方法,但它根本不起作用。

我的快速解决方法是将所有参数放在 1 个字符串中,并用空格分隔它们。然后我拆分这个字符串:

String [] arguments = Macro.getOptions().split(" ");

我没有看到更方便的方法来解决这个问题。我不敢相信这种情况有多愚蠢。

如果您有更好的解决方案,请随时分享!谢谢

【问题讨论】:

  • 在抱怨“这种情况有多愚蠢”之前,请尝试了解软件的设计 - 顺便说一句,该软件自 1990 年代以来一直在发展。
  • 对不起,我没有冒犯的意思,我的意思是我不能相信“硬方法”是处理这个问题的唯一方法。感谢您的回复!

标签: java plugins macros imagej


【解决方案1】:

您将ij.plugin.Plugin 中的run(String arg) 方法与调用IJ.run(String command, String options) 的ImageJ 宏命令run("command"\[, "options"\]) 混淆了。

ij.plugin.Plugin#run(String arg) 的文档中,它说:

加载插件时调用此方法。 'arg',可能为空,是在 IJ_Props.txt 中为此插件指定的参数。

所以,arg 是一个可选参数,您可以在IJ_Props.txt 或插件的plugins.config 文件中使用它来为插件的不同功能分配不同的菜单命令(另请参见excellent documentation on the Fiji wiki)。

要在从宏代码运行插件时使用options 参数,您应该使用GenericDialog 来获取选项,或者(正如您显然学过的那样)使用辅助函数Macro.getOptions()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多