estou estudando (sem compromisso o swt) e verifiquei como a instancia do form funciona.
quando você coloca as seguintes linhas
Display display = new Display();
Shell shell = new Shell(display);
shell.open();
já é o suficiente para você ter a janela, mas assin que ela abre, já fecha automaticamente.
Assim é preciso que você insira um loop que primeiro verifica se o usuário não fechou a janela. A outra verificação indica que ele deve verificar a fila de eventos para qualquer mensagem que o sistema de janelas ou outras partes de sua aplicação tenha sido gerado para você.
Dai o loop que você citou. Este loop é necessário. Uma alternativa é utilizar a biblioteca JFace.
Em JFace o código fica muito menor
import org.eclipse.jface.window.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.*;
public class JanelaSWTeJFace extends ApplicationWindow{
public JanelaSWTeJFace(){
super(null);
}
protected Control createContents(Composite parent){
parent.pack();
return parent;
}
public static void main(String[] args){
JanelaSWTeJFace janela = new JanelaSWTeJFace();
//agora sem o loop do swt
janela.setBlockOnOpen(true); //se verdadeiro chama o proximo metodo open()
janela.open();
Display.getCurrent().dispose();
}
}
Tem um livro nacional que trata do básico(básico mesmo do uso do SWT e JFace). Segundo li as duas bilbiotecas devem ser utilizada em conjunto principalmente em aplicações java para desktops. O livro é “Dominando eclipse - Tudo que o Desenvolvedor java precisa para criar aplicativos para desktops” de Edson Gonçalves - editora moderna.
Eu achei no emule
Uma dica: use as tags code para incluir código no post blz
Espero que ajude