http://imagej.273.s1.nabble.com/Is-it-possible-to-send-a-command-to-a-running-copy-of-ImageJ-via-a-socket-tp5024089p5024107.html
Hi and thanks for your reply.
The problem with his approach for my use case is that I wish to open images in ImageJ from another Java application. I could use a java.lang.Runtime.exec(String command) but this would be messy necessitating different OS-specific command strings to constructed for each platform.
Since ImageJ already can interpret various scripting languages (its own macro scripts and also javascript), it seems a shame that there is not just a socket one can send a piece of javascript or macro scripting language to drive ImageJ remotely.
A nice benefit is that an ImageJ could take a command-line argument to determine whether the sockets accepted requests for local and or remote access thus making it possible to drive ImageJ remotely from a different computer.
I might consider implementing this as a plugin if this functionality does not already exist. I have used this approach elsewhere. I just dod not want to start reinventing the wheel if ImageJ already had this.
> Can't you just open ImageJ via the OS, with the multiple instance listener active?
> Then subsequent commands will use the same instance.
> You can use of the -port option to pass the command to one of several instances.
>
> The following works as expected in a Windows command batch file:
>
> start ImageJ.exe -eval "eval('script', 'IJ.getInstance().setTitle(\"ImageJ default\")');"
> start ImageJ.exe -port1 -eval "eval('script', 'IJ.getInstance().setTitle(\"ImageJ at port 1\")');"
> start ImageJ.exe -port2 -eval "eval('script', 'IJ.getInstance().setTitle(\"ImageJ at port 2\")');"
> timeout 10
> start ImageJ.exe -eval "print('hello from ImageJ at the default port')"
> start ImageJ.exe -port1 -eval "print('hello from ImageJ at port 1')"
> start ImageJ.exe -port2 -eval "print('hello from ImageJ at port 2')"
> timeout 3
> start ImageJ.exe -eval "print('another hello from ImageJ the default port')"
> start ImageJ.exe -port1 -eval "print('another hello from ImageJ at port 1')"
> start ImageJ.exe -port2 -eval "print('another hello from ImageJ at port 2')"
>
> Here we have three instances running; I start each instance with a small JavaScript to rename the
> main window in order to easier tell the difference between them. Then we can pass commands,
> specifying which instance we want each of the commands to execute in. The "timeout 10" command
> inserts a 10 seconds delay to give sufficient time for all three instances of ImageJ to launch,
> before we start passing commands to each of them. Opening an image or running a macro in each
> instance will work the same way.
>
> I use the "start" command to launch ImageJ asynchronously, or else the Windows script would wait
> until each instance of ImageJ has quit. Since this runs asynchronously, we need to add an
> appropriate delay between subsequent commands to the same instance, to allow whatever command you
> passed to it to finish; in this case 3 seconds.
>
> Stein
>
> -----Original Message-----
> From: ImageJ Interest Group <
[hidden email]> On Behalf Of Michael Ellis
> Sent: 19. oktober 2020 14:37
> To:
[hidden email]
> Subject: Is it possible to send a command to a running copy of ImageJ via a socket?
>
> Hello all.
>
> Is it possible to send a command to a running copy of ImageJ via a socket?
>
> The sort of thing I had in mind could be illustrated with the unix 'nc' command as follows:
>
> $ echo 'open /path/to/file/Meta1.tif' | nc localhost 57294
>
> I can see that ImageJ can use Socket ports to prevent multiple instances of ImageJ from running but
> I cannot see how to explicitly send a command via a Socket.
>
> My final use case is from my own standalone java application to be able to request an already
> running copy of ImageJ open an image file.
>
> If this is not possible is there already an ImageJ plugin that already written that does the job?
>
> As ever thanks in advance for any help.
> Michael Ellis
>
> Digital Scientific UK Ltd
>
> --
> ImageJ mailing list:
>
https://eur03.safelinks.protection.outlook.com/?url=http://imagej.nih.gov/ij/list.html&data=04|01|st
>
[hidden email]|cd3da405f538449585dd08d8742bec55|e1f00f39604145b0b309e0210d8b32af|1|0|6373870792
> 4701433|Unknown|TWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0=|1000&sd
> ta=gQxlzYvUrFDJMgQqUKXnLjR1woFAOmpdxjl+oiiUJk4=&reserved=0
>
> --
> ImageJ mailing list:
http://imagej.nih.gov/ij/list.html