JDialog Modal trava meu programa

Boa noite pessoal,

eu tenho um editor gráfico GMF. Eu alterei uma janela de propriedades e criei
um Jdialog e o setei como Modal, pois precisava esperar a janela fechar
para que o restante do código executasse. Porém quando esse JDialog
está em execução, ao invés de ele somente bloquear as outras telas,
se eu clico dentro do editor ele trava e só se recupera quando
eu fecho o JDialog, aparece até se eu quero encerrar o processo do
windows. Quando eu fecho o JDialog, tudo volta ao normal. Alguma ideia
do que está acontecendo?

Grato.

Caro colega pablosnr penso que ao setar o seu JDialog como modal ela não permirirá que voce mova para outras janelas da sua aplicação.
O objectivo de uma JDialog modal é esse, se quiser use uma não modal e teste em sua aplicação.
use este método setModal() ficaria assim:

jDialog.setModal(false);

abs

Então,

mas eu preciso que o meu JDialog seja modal para que o programa que o abre
espere que eu feche esse JDialog para continuar a execução, pois
eu preciso do resultado dessa janela.

Rode seu processamento longo em outra thread.

Vou postar o código que está dando problema:

[code]public CellEditor createPropertyEditor(Composite parent) {
return new ExtendedDialogCellEditor(parent, getLabelProvider()) {
@Override
protected Object openDialogBox(Control cellEditorWindow) {
// Dialog creation

			 ObserverImpl function = (ObserverImpl) object;
			 String list = function.getProperties();
			 final ObserverDialog frame = new ObserverDialog();
			 frame.setObsProperties(list);
			 
			 System.out.println(list);
			 
			 int indexI = 0;
			 int indexF = -1;
			 String aux = null;
			 
			 for(int i = 0; i < list.length(); i++){
				 
					if(indexI != -1)	
					indexI = list.indexOf("name{", indexI);
					else
						break;
					
					//System.out.println(indexI);
					if(indexI != -1)
					indexF = list.indexOf("}", indexI+5);
					
					
					//System.out.println(indexF);
				    if(indexF != -1 && indexI != -1)
				    aux = "name = " + list.substring(indexI+5, indexF);
				    
				    
				    indexI = list.indexOf("type {", indexF);
				    
				    if(indexI != -1)
					indexF = list.indexOf("}", indexI+6);
				    
				    if(indexF != -1 && indexI != -1){
					    aux += ", type = " + list.substring(indexI+6, indexF);
					    frame.addElementObsList(aux);
				    }
				    
				    indexI = list.indexOf("name{", indexF) + 5;
					
					
					}
			 
			 
			
			frame.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
			frame.setVisible(true);
			
			
			// Open the dialog and retrieve the user selection

			return frame.getClose() == 1 ? frame.getObsProperties() : null ;
		}
	};
}[/code]

Eu preciso que o frame se feche para que eu retorne um atributo que foi preenchido dentro do mesmo.
O único jeito que achei de fazer isso, foi utilizando JDialogs. Tive que usar swing, pois tinha elementos
gráficos que SWT não tinha. Se for para colocar Threads qual parte deste código devo executar em outra Thread?
Alguém poderia dar um exemplo por favor.

Grato.

Oi,

O que você entende por Thread?

A Thread fará uma outra parte do seu programa rodar em paralelo. Então imagine o que você faria neste outro universo e coloque o seu código lá dentro.

Tchauzin!

Todo processamento da linha 15 até a 49.

Coloquei essas linhas dentro de um Thread e ainda está travando.
Era pra ele somente bloquear as telas de fundo, mas se eu clico nela, ela trava.
Eu coloquei a parte que seta a janela a ser modal dentro da Thread só que ai
o return executa antes que eu tenha a resposta do JDialog. Há algum outro jeito de
fazer o programa esperar do que com JDialogs?

Posta seu código com a Thread como indiquei.

Desculpe pessoal, é que eu estava viajando, mas meu problema não foi resolvido.
Vini se você puder olhar o código com o Thread e ver se é realmente assim que faz,
porém eu não obtive sucesso, continuou travando. Isso só acontece mesmo
quando eu seto o JDialog como Modal e é realmente isso o que eu preciso,
pois como a aplicação que eu estou desenvolvendo é baseada em eclipse,
preciso que o meu aplicativo espere o JDialog ser fechado para continuar a execução.

Olhe o código:

[code]public class ObserverPropertyDescriptor extends PropertyDescriptor {

private String list;
private ObserverDialog frame;
private int indexI = 0;
private int indexF = -1;
private String aux = null;

public ObserverPropertyDescriptor(Object object,
		IItemPropertyDescriptor itemPropertyDescriptor) {
	super(object, itemPropertyDescriptor);
	
}

@Override
public CellEditor createPropertyEditor(Composite parent) {
	return new ExtendedDialogCellEditor(parent, getLabelProvider()) {
		@Override
		protected Object openDialogBox(Control cellEditorWindow) {
			// Dialog creation
			
			 int result = 0;
			 ObserverImpl function = (ObserverImpl) object;
			 list = function.getProperties();
			 frame = new ObserverDialog();
			 
			 frame.setObsProperties(list);
			 frame.setAlwaysOnTop(true);
			 
			 new Thread(){
			 
				 public void run(){
					 for(int i = 0; i < list.length(); i++){
						 
							if(indexI != -1)	
							indexI = list.indexOf("name{", indexI);
							else
								break;
							
							//System.out.println(indexI);
							if(indexI != -1)
							indexF = list.indexOf("}", indexI+5);
							
							
							//System.out.println(indexF);
						    if(indexF != -1 && indexI != -1)
						    aux = "name = " + list.substring(indexI+5, indexF);
						    
						    
						    indexI = list.indexOf("type {", indexF);
						    
						    if(indexI != -1)
							indexF = list.indexOf("}", indexI+6);
						    
						    if(indexF != -1 && indexI != -1){
							    aux += ", type = " + list.substring(indexI+6, indexF);
							    frame.addElementObsList(aux);
						    }
						    
						    indexI = list.indexOf("name{", indexF) + 5;
							
							
							}
				 }
			 }.start();
			
			frame.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
			frame.setVisible(true);
			
			
			if(frame.getClose() == 2){
				result = 2;
				list = frame.getObsProperties();
				frame.dispose();
			}
				
			
			
			// Open the dialog and retrieve the user selection
			//labelProvider.dispose();
			return result == 2 ? list : null;
		}
	};
}

}[/code]

A maneira como a tela trava é a da figura abaixo:

http://upload.crazzy.com.br/show-image.php?id=33396e0d068936d35bac5becd9d3ba69

Bom analisando o código que eu escrevi, tenho alguns poréns a considerar, que podem ser a fonte
do problema:

Pelo que entendo, a arquitetura de janelas de properties view do Eclipse são feitas sobe SWT/JFACE.
Eu necessito que minha interface das propriedades que eu estou sobrescrevendo seja feita
em Swing, pois SWT é muito limitada e não tem os elementos que eu preciso.
Dessa maneira como

é um JDialog e eu o setei como modal, acredito que se eu passar a janela que está travando como parâmetro, não daria
esse erro. Eu consigo recuperar o WorkBench através do código:

Porém como vocês podem ver isso é um shell e até onde eu sei não consigo
converter isso como um JDialog para passar como parâmetro.

Teria alguma maneira de manter o foco na janela ao clicar na parte do eclipse
fazendo manualmente. Por exemplo com um evento de perda de foco.

Se tiverem alguma solução para meu caso, agradeço muito a ajuda. Se não
terei que dar um jeito de mudar algumas coisas para SWT.
Talvez tenha algum jeito com Threads e eu não sei codificar corretamente.

Desde já agradeço a colaboração!