Buenos días, estaba trasteando en Java y estaba intentando que desde una clase "Menu" me llamase a otra clase Mantenimiento, que se encarga de crear una ventana con botones. Todo bien hasta que cuando le doy al botón en "Menu" y me intenta llamar a "Mantenimiento", que me da la siguiente excepcion:
IWAV0055I Java Bean com.Menu started with the main method
IWAV0052E Invocation Target Exception creating com.Menu
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.ve.internal.java.vce.launcher.remotevm.JavaBeansLauncher.main(JavaBeansLauncher.java:79)
Caused by: org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(SWT.java:4083)
at org.eclipse.swt.SWT.error(SWT.java:3998)
at org.eclipse.swt.SWT.error(SWT.java:3969)
at org.eclipse.swt.widgets.Display.checkDisplay(Display.java:766)
at org.eclipse.swt.widgets.Display.create(Display.java:828)
at org.eclipse.swt.graphics.Device.<init>(Device.java:137)
at org.eclipse.swt.widgets.Display.<init>(Display.java:480)
at org.eclipse.swt.widgets.Display.<init>(Display.java:471)
at com.Mantenimiento.main(Mantenimiento.java:17)
at com.Menu$1.widgetSelected(Menu.java:36)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
at com.Menu.main(Menu.java:51)
... 5 more
Y por si hace falta también adjunto las 2 clases.
package com;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class Menu {
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell();
shell.setText("Gestor de Tornillos");
shell.setVisible(true);
GridLayout layout = new GridLayout();
layout.numColumns = 1;
shell.setLayout(layout);
Button btnMantenimiento = new Button(shell, SWT.PUSH);
btnMantenimiento.setText("Mantenimiento");
btnMantenimiento.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 1));
Button btnSalir = new Button(shell, SWT.PUSH);
btnSalir.setText("Salir");
btnSalir.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 1));
SelectionAdapter mant = new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
Mantenimiento.main(null);
}};
SelectionAdapter clos = new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
System.exit(0);
}};
btnMantenimiento.addSelectionListener(mant);
btnSalir.addSelectionListener(clos);
shell.pack();
shell.setSize(300, 100);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
package com;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class Mantenimiento {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Display display = new Display();
Shell shell = new Shell();
shell.setText("Mantenimiento");
shell.setVisible(true);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
shell.setLayout(layout);
Button btnTornillos = new Button(shell, SWT.PUSH);
btnTornillos.setText("Tornillos");
btnTornillos.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 1));
Button btnClientes = new Button(shell, SWT.PUSH);
btnClientes.setText("Clientes");
btnClientes.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 1));
Button btnComerciales = new Button(shell, SWT.PUSH);
btnComerciales.setText("Comerciales");
btnComerciales.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 1));
Button btnPedidos = new Button(shell, SWT.PUSH);
btnPedidos.setText("Pedidos");
btnPedidos.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 1));
shell.pack();
shell.setSize(300, 150);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
Aunque supuse que se sobreentendería lo que necesito, me ayudaría que alguien me dijera cómo solucionar dicha excepción xd.