Fechar um JDialog após o ProcessBuilder(parametros).start() estiver terminado

Olá pessoas, então eu criei um programa em C++ e estou rodando ele em uma interface gráfica em java com o ProcessBuilder(parametros).start(). O programa é basicamente consiste em o usuário escolher a instância e depois apertar o botão de “Solucionar” e nisso é chamado o programa em C++ para resolver o problema. Porém o programa demora alguns segundos para resolver a instância, variando esse tempo de acordo com a instância escolhida, eu criei uma dialog como forma de aviso que o programa ainda estava no processo de resolução, mas quando o process termina o dialog não fecha sozinho mesmo eu usando alguns métodos como .dispose(); .disable(); .setVisible(false) entre outros… e também não libera para que a solução seja impressa num JTextArea, enquanto eu não clico no “ok” do Jdialog. Enfim, vcs poderiam me ajudar? Acho que não estou sabendo verificar quando e onde o processo de fato termina. Segue em baixo o trecho do código.

        String[] param = new String[3];
        param[0] = "/home/ricardo/NetBeansProjects/InterfacePLR/src/results/exe";
        param[1] = caminhoArquivo.getText();
        param[2] = caminho.getAbsolutePath();
        Process process = null;
        JOptionPane pane = new JOptionPane("Programa em execução, não desligue a máquina!");
        JDialog dialog = pane.createDialog(null, "AVISO" ); 
        try {
            process = new ProcessBuilder(param).start();
            while(process.isAlive())
                dialog.setVisible(true);
            if(!process.isAlive())
                dialog.getOwner().dispose();
        } catch (IOException ex) {
            Logger.getLogger(Tela.class.getName()).log(Level.SEVERE, null, ex);
        }
        InputStream is = process.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String linha, solucao = "\n";
        try {
            while ((linha = br.readLine()) != null) {
                solucao += linha;
                solucao += "\n";
            }
            campoSolucao.setText(solucao);
        } catch (IOException ex) {
            Logger.getLogger(Tela.class.getName()).log(Level.SEVERE, null, ex);
        }