2016-04-08 11 views
0

Ich habe einen Applet-Start mit HTML-Applet-Tag in eine jnlp-Bereitstellung mit Applet-Deskriptor migriert.Java JNLP Applet auf Fenster schließen nicht stoppen

Wenn die Applet-Lösung geschlossen wird, endet die Java-Anwendung.

Mit der JNLP-Lösung stoppt die Java-Anwendung nicht, wenn das Fenster geschlossen wird. Und Ausnahme ausgelöst:

Plugin2Manager calling stopFailed() because of exception during AppContext.dispose() 
Plugin2Manager calling stopFailed() because of displayable window   javax.swing.JFrame[frame0,240,1,1018x647,invalid,hidden,layout=java.awt.BorderLayout,title=TimeCheck,normal,defaultCloseOperation=HIDE_ON_CLOSE,rootPane=javax.swing.JRootPane[,3,32,1012x612,invalid,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=16777673,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true] 
Exception in thread "Thread-19" java.lang.NullPointerException 
    at sun.plugin2.applet.Plugin2Manager.destroyAppContext(Unknown Source) 
    at sun.plugin2.applet.JNLP2Manager.destroyAppContext(Unknown Source) 
    at sun.plugin2.applet.Plugin2Manager.cleanupAppContext(Unknown Source) 
    at sun.plugin2.applet.Plugin2Manager.shutdownAppContext(Unknown Source) 
    at sun.plugin2.applet.Plugin2Manager.stop(Unknown Source) 
    at sun.plugin2.applet.viewer.JNLP2Viewer$2$1.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

Ihnen sehr danken.

Antwort

0

Die Lösung besteht darin, einen WindowListener zum topLevel Frame hinzuzufügen. Sobald wir den TopLevel Frame haben, ist es auch möglich Resizable zu setzen.

.... 
    while (parent.getParent() != null) 
     parent = parent.getParent(); 
     if (parent instanceof Frame) { 
      ((Frame) parent).setResizable(true); 
      ((Frame) parent).addWindowListener(this); 
    } 
    .... 

Der Event-Handler für das Close-Ereignis wird ein System.exit() ausführen;

public void windowClosed(WindowEvent e) { 
    // TODO Auto-generated method stub 
    System.exit(0); 
}