Habilitar botão SWT dentro do evento oncliked do AWT

Boa noite pessoal!
Preciso habilitar um botão que foi criado usando SWT ao clicar em um objeto Canvas só que obtenho uma Thread Exception devido o objeto não ser SWT, ou seja, não tenho acesso a outra Thread.

canvasCap1.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent e) { imgselecionada = 1; esczoom = 0; if (!videoiniciado){ canvasv = new Canvas(){ private static final long serialVersionUID = 1L; public void paint(Graphics g){ Dimension dFrame = frame.getSize(); double x = dFrame.getWidth(); double y = dFrame.getHeight(); g.drawImage(imagens.get(0).getScaledInstance((int)x, (int)y, 1), 0, 0, null); } }; //Preciso habilitar o botão aqui... frame.removeAll(); frame.add(canvasv); frame.validate();

Alguém pode me ajudar como posso fazer isso?

E por acaso a variável videoIniciado vale false?

Qual é a exception que você está tendo? Já tentou usar o depurador?

Me parece que o problema não tem absolutamente nada a ver com o que você desconfia que seja.

1 - A variável videoiniciado vale false sim, até ai ok.
2- A exception que ocorre é essa:

Exception in thread "AWT-EventQueue-0" org.eclipse.swt.SWTException: Invalid thread access at org.eclipse.swt.SWT.error(SWT.java:3884) at org.eclipse.swt.SWT.error(SWT.java:3799) at org.eclipse.swt.SWT.error(SWT.java:3770) at org.eclipse.swt.widgets.Widget.error(Widget.java:463) at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:355) at org.eclipse.swt.widgets.Control.setEnabled(Control.java:2923)

Agora segue exatamente onde estou tentando habilitar o botão de zoom ao clicar na imagem.

canvasCap1.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent e) { imgselecionada = 1; esczoom = 0; if (!videoiniciado){ canvasv = new Canvas(){ private static final long serialVersionUID = 1L; public void paint(Graphics g){ Dimension dFrame = frame.getSize(); double x = dFrame.getWidth(); double y = dFrame.getHeight(); g.drawImage(imagens.get(0).getScaledInstance((int)x, (int)y, 1), 0, 0, null); } }; btnZoomais.setEnabled(true);//O problema ocorre aqui... frame.removeAll(); frame.add(canvasv); frame.validate();

alguém se arrisca?

É uma boa prática ler um pouco sobre a exception:
http://wiki.eclipse.org/FAQ_Why_do_I_get_an_invalid_thread_access_exception%3F

Display.getDefault().asyncExec( new Runnable() { public void run() { btnZoomais.setEnabled(true); } } );

PS: O Swing tem exatamente a mesma arquitetura. Para alterar objetos do Swing a partir de outras threads, você troca a primeira linha por:

Obrigado Vini funcionou blz.
Vo seguir seu conselho e estudar mais sobre o assunto. Estou estudando java mas tenho pouca experiência.
De qualquer forma muito obrigrado!

Até a próxima.

Nem é questão de experiência. Simplesmente digitei: “Invalid thread access” no google e abri a primeira página que apareceu.
E lá estava a explicação, bem detalhada, do que deveria ser feito para evitar o problema.

Eu mesmo nunca programei em SWT. Então vc é mais experiente nela que eu. :slight_smile: