widgets sistema que oxygen example java macos swt

java - sistema - ¿Cómo puedo hacer que mi aplicación SWT básica salga correctamente en Mac OS X 10.5.6?



swt o swing (2)

Cuando asignó el Shell:

shell = new Shell();

algunos recursos nativos fueron asignados junto con él. Debe deshacerse de estos recursos antes de salir de su aplicación:

private void exit() { shell.dispose(); System.exit(0); }

Por supuesto, debe proporcionar la variable "shell" a su método exit () para hacer esto.

Tenga en cuenta que no creo que deba deshacerse de la pantalla, ya que no la creó con " new Display() ". Pero cualquier cosa en SWT (excepto en algunos artículos donde esto está documentado en JavaDoc) que usted crea con la new debe deshacerse cuando haya terminado con ella. De lo contrario, perderá recursos nativos.

Tengo el siguiente código de prueba SWT:

public static void main(String[] args) { shell = new Shell(); shell.setText(APP_NAME + " " + APP_VERSION); shell.addShellListener(new ShellListener() { public void shellActivated(ShellEvent event) { } public void shellClosed(ShellEvent event) { exit(); } public void shellDeactivated(ShellEvent event) { } public void shellDeiconified(ShellEvent event) { } public void shellIconified(ShellEvent event) { } }); shell.open(); display = shell.getDisplay(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } display.dispose(); }

Mi método exit () es el siguiente:

private void exit() { System.exit(0); }

Intento salir de la aplicación cerrando el shell ("ventana") o abriendo el menú de la aplicación (etiquetado como "SWT") y seleccionando "Salir".

Cuando hago esto, un talón SWT queda atrás en el Dock y la aplicación SWT no ha salido realmente. Tengo que finalizar manualmente la aplicación SWT a través de Eclipse o a través de Force Quit.

Lo he intentado con los archivos jar SWT v3.4 y v3.5, bajo Eclipse 3.4.1 bajo Mac OS X 10.5.6 (Intel).

¿Hay algún trabajo adicional que deba hacer para poder salir de la aplicación cuando cierro el shell?


No está liberando los recursos nativos correctamente, tiene una fuga de recursos.

No necesitas hacer esto:

private void exit() { System.exit(0); }

El método principal saldrá cuando el caparazón esté dispuesto. Si debe usar un método de salida, llámelo una vez que haya dispuesto todos los recursos de SWT:

Display display = new Display(); try { Shell shell = new Shell(display); try { shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } } finally { if (!shell.isDisposed()) { shell.dispose(); } } } finally { display.dispose(); } System.exit(0);