Currently, ImageJ has several design issues that impact any possibility of running it without a GUI in a headless environment:

Commands are tied to specific AWT menu items

The macro system is tied to the AWT-driven GenericDialog

The code was generally designed assuming AWT GUI elements are available

We want to separate ImageJ into a (headless) library layer that performs image processing without a GUI, and one or more graphical layers that provide user interaction and call into the library to perform tasks.

As part of this task, we are exploring strategies to organize this separation, such as a Model-View-Controller (MVC) architecture. There are various MVC frameworks available such as Struts and Spring, though they are generally targeted toward web applications rather than desktop ones. We plan to examine these, though it is equally likely we will avoid dependencies on third-party libraries in favor of a simpler design.

Our current approach is to use SezPoz for dependency injection, with a GUI-independent plugin/module/tool interface hierarchy. Depending on the execution context (in a GUI, headless from a console, etc.) the mechanism for plugin and module execution will change. It looks unlikely at this time that we will need to rely on any formal MVC framework.