Thank you everyone for taking the time to explain the technical details behind this. I really appreciate the responses from @paul-griffith, @pturmel , @justinedwards.jle , @lrose and everyone else who contributed. The discussion helped me better understand the Swing EDT limitations and why Vision doesn't provide a native modal popup option similar to Perspective.
For my current requirement, I ended up using a simple approach that gives users a modal-like experience. I placed a transparent rectangle component that covers the entire main window and bound its visibility to a Boolean tag. The rectangle's mouse-click event script simply contains pass, so when it is visible it absorbs all mouse clicks without performing any action.
When a user clicks a button to open a popup, I first set the Boolean tag to True, which makes the transparent rectangle visible, and then I open the popup window. The popup remains fully interactive, but any clicks on the background window are intercepted by the transparent rectangle, so the user cannot interact with the underlying components. The background screens continue running normally, but only the popup can receive user interaction.
Whenever the popup is closed, or when the operator completes the action and closes the popup, I set the Boolean tag back to False. This makes the transparent rectangle invisible again and immediately restores normal interaction with the underlying window and components.
This approach has worked well for my use case and provides a modal-like experience for operators while allowing the rest of the application to continue running normally.
@pturmel , would you consider this approach conceptually similar to the glass-pane approach you described, or is it fundamentally different from what you mean by a proper Java Glass Pane attached to the JFrame?
Thanks again to everyone for the detailed explanations. I learned a lot from this discussion, especially regarding Swing, the EDT, modal dialogs, and the glass-pane concept.