Problema com Process.waitFor();

Olá pessoal, é o seguinte:

Tenho uma aplicação onde faço uso do Runtime.exec que vai chamar um programa externo que atualiza uma base de dados.
O problema é que se eu não faço uso das Dlls do windows meu programa externo trava e meu process.waitFor(); não funciona.

Vou colocar aqui um exemplo de quando funciona e quando dá errado.

Não funciona:

[code]public class testing {

public static void main(String[] args) {

	Runtime r = Runtime.getRuntime();
	System.out.println("Calling Run "); 
	try{
		
		String x = "calc";
		Process p = r.exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+x );
		System.out.println("hi");
		
		
		 p.waitFor();
					
		
		System.out.println("Process terminated !!!");
	}//try
	catch(Exception e)
	{
		System.out.println("Exception occurred :"+e);
	}

}//main

}//class[/code]

Funciona:[code]public class testing {

public static void main(String[] args) {

	Runtime r = Runtime.getRuntime();
	System.out.println("Calling Run "); 
	try{
		
		String x = "calc";
		Process p = r.exec(x);
		System.out.println("hi");
		
		
		 p.waitFor();
					
		
		System.out.println("Process terminated !!!");
	}//try
	catch(Exception e)
	{
		System.out.println("Exception occurred :"+e);
	}

}//main

}//class[/code]

Quando eu utilizo as dlls, a mensagem de Process terminated aparece antes que eu feche o programa, sem as dlls, a mensagem só aparece quando eu o fecho.

Só que na minha aplicação, se eu não ponho as dlls ela abre o processo no TaskManager mas ele fica travado, quando ponho as dlls, meu programa que atualiza funciona, mas o meu programa em java não espera ele terminar.

Alguém sabe a razão disso acontecer ou um jeito do process.waitFor() esperar o processo que eu quero?

Abraço!