You could bypass system.gui entirely and directly use ErrorUtil. Any of the overloads that accept a Component first argument can be provided any arbitrary JComponent - in theory, providing a component/window/etc would tell Swing to open it on the correct monitor.
I wouldn’t expect it to be safe to run .messageBox() and friends from a background thread. Consider opening a popup at the start, hiding it, then updating it via invokeLater().
weird, even if I provide the Jframe of the secondary desktop as component parameter,
error.showInfo(parent,msg,title) open a box on the primary desktop when invoked from invoke later in an invoke asynchronous…
Yeah, I figured that might happen. This might be an outright Swing bug, not something wrong with our code. It might still be possible to work around it, but it’s going to get a lot harder.