Este não é necessariamente o melhor maneira, mas pode funcionar para você.
Você pode escrever um aplicativo de bootstrap (como o iniciador do World of Warcraft, se você já jogou WoW). Esse bootstrap é responsável por verificar as atualizações.
- Se houver uma atualização disponível, ela a oferecerá ao usuário, fará o download, a instalação, etc.
- Se o aplicativo estiver atualizado, permitirá ao usuário iniciar o aplicativo
- Opcionalmente, você pode permitir que o usuário inicie o aplicativo, mesmo que não esteja atualizado
Desta forma, você não precisa se preocupar em forçar a saída de seu aplicativo.
Se o seu aplicativo for baseado na web e se for importante que eles tenham um cliente atualizado, você também pode fazer verificações de versão enquanto o aplicativo é executado. Você pode fazer isso em intervalos, durante a comunicação normal com o servidor (algumas ou todas as chamadas), ou ambos.
Para um produto em que trabalhei recentemente, fizemos verificações de versão no lançamento (sem um aplicativo de boot, mas antes que a janela principal aparecesse) e durante as chamadas para o servidor. Quando o cliente estava desatualizado, contamos com o usuário para encerrar manualmente, mas proibimos qualquer ação contra o servidor.
Observe que não sei se o Java pode invocar o código da IU antes de você abrir a janela principal. Estávamos usando C # / WPF.