# Thread [DestroyJavaVM] (Running)



## zuban (13. Mrz 2007)

Ich habe ein Klasse "Test" welche von java.rmi.server.UnicastRemoteObject erbt. Nun übergebe ich eine Referenz einer Instanz davon der Klasse GuiTest. GuiTest macht nur ein Fenster aus (SWT). Wenn ich das Fenster wieder schließe endet aber nicht der Prozess. In Eclipse steht dann nur folgendes und Thread [DestroyJavaVM] läuft und läuft ...:


> MyTest [SWT Application]
> MyTest at localhost:1439
> Thread [DestroyJavaVM] (Running)
> C:\Programme\Java\jre1.6.0\bin\javaw.exe (13.03.2007 10:04:50)




Wenn "Test" nicht von java.rmi.server.UnicastRemoteObject erben würde, tritt das nicht auf. Auch wenn ich nur Test instanzieren tue und das nicht GuiTest übergeben würde tritt es auch nicht auf.



```
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class Test extends UnicastRemoteObject {
    
    public Test() throws RemoteException {
    }
}
```



```
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class GuiTest {

    Test test;
    
    public Shell shell;
    
    public Display display;
    
    public GuiTest(Test test) {
        this.test = test;
    }
    
    public void create() {
        display = new Display();
        shell = new Shell(display, SWT.SHELL_TRIM);
        shell.pack();
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        display.dispose(); 
    }
}
```



```
public class MyTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        try {
            Test test = new Test();
            GuiTest gui = new GuiTest(test);
            gui.create();
        } catch (RemoteException e) {
            e.printStackTrace();
        }
        
    }

}
```


----------



## zuban (17. Mrz 2007)

Ich habe mir jetzt so geholfen, dass ich in GuiTest nach display.dispose() ein System.exit(0) mache.


----------



## fast (3. Jun 2007)

Anscheinend muß das Server-Objekt 'unexported' werden; API-Spec sagt:

UnicastRemoteObject.unexportObject(obj, force)
...Removes the remote object, obj, from the RMI runtime...

Ich benutze die Zeilen:

   registry.unbind(name);
   UnicastRemoteObject.unexportObject(this, true);

Damit terminiert das Programm dann wie gewünscht.


----------

