imageJ 插件参数

kal*_*gne 4 java macros plugins imagej

您好,我正在尝试将参数传递给我的 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 + ".");

    }
 }
Run Code Online (Sandbox Code Playgroud)

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

run("Test");
Run Code Online (Sandbox Code Playgroud)

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

Starting plugin Test
args: ..
Run Code Online (Sandbox Code Playgroud)

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

run("Test", "my_string");
Run Code Online (Sandbox Code Playgroud)

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

Starting plugin Test
args: ..  //  <- I would like to get "my_string" passed there 
Run Code Online (Sandbox Code Playgroud)

它应该显示在哪里(至少我期望它做什么)

Starting plugin Test
args: .my_string. 
Run Code Online (Sandbox Code Playgroud)

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


编辑


嘿,我找到了一种绕过方法:

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

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

String [] arguments = Macro.getOptions().split(" ");
Run Code Online (Sandbox Code Playgroud)

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

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

Jan*_*ger 5

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

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

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

所以,arg是一个可选参数,您可以在插件文件中IJ_Props.txt或在plugins.config插件文件中使用它来为插件的不同功能分配不同的菜单命令(另请参阅斐济维基上的优秀文档)。

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