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!