Implementare PostWindowChelose () nell'applicazione RCP
Domanda
Ciao RCP Sviluppatori,
Voglio Implement postWindowClose()
nel mio Eclipse RCP Applicazione.
Prima di codificare questo metodo, ho appena fatto un piccolo test per vedere se quando I Chiudi La mia applicazione, il metodo è chiamato, quindi ho fatto questo:
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
public class MainWindowControl extends WorkbenchWindowAdvisor{
public MainWindowControl(IWorkbenchWindowConfigurer configurer) {
super(configurer);
// TODO Auto-generated constructor stub
}
@Override
public void postWindowClose() {
// TODO Auto-generated method stub
super.postWindowClose();
System.out.println("close");
}
}
.
Mi aspetto di vedere: close
in Eclipse console, ma è ancora in bianco dopo aver chiuso l'applicazione.
Tutti i plugin richiesti vengono aggiunti e non ho errori durante il lancio o la chiusura dell'applicazione.
Allora, mi manca qualcosa?
I motivi per cui gli implemetti questo metodo sono:
- .
- MSG Box:
Are you sure you want to close the application
- Uccidi tutti i thread in esecuzione, i file di caricamento dell'applicazione e anche quando chi chiudo l'applicazione che esegue i caricamenti in esecuzione continua. Voglio abandarli quando si chiude l'applicazione.
Modifica:
My Life Cycle Class:
package upload.center.util;
import org.eclipse.e4.ui.workbench.lifecycle.PostContextCreate;
import org.eclipse.e4.ui.workbench.lifecycle.PreSave;
public class WindowLifeCycle {
@PostContextCreate
public void postContextCreate()
{
// TODO start up code here
System.out.println("open");
}
@PreSave
public void preSave()
{
// TODO add shutdown code here
System.out.println("close");
}
}
.
My plugin.xml:
<product ....
<property
name="windowLifeCycle"
value="bundleclass://UploadCenter.Source/upload.center.util.WindowLifeCycle">
</property>
...</product>
.
Spero che io sia abbastanza chiaro.
Ismail
Soluzione
Per un'applicazione Pure Eclipse 4 (E4) Il consulente della finestra del workbench (e gli altri consulenti) non vengono utilizzati.Si utilizza il metodo @PreSave
di una classe di ciclo di vita per eseguire il codice durante l'arresto.
public class LifeCycle
{
@PostContextCreate
public void postContextCreate()
{
// TODO start up code here
}
@PreSave
public void preSave()
{
// TODO add shutdown code here
}
}
.
Dichiarare la classe di ciclo di vita nella definizione del prodotto nel plugin.xml
:
<extension
id="product"
point="org.eclipse.core.runtime.products">
<product
name="%product.name"
application="org.eclipse.e4.ui.workbench.swt.E4Application">
<property
name="lifeCycleURI"
value="bundleclass://plugin-id/package.LifeCycle">
</property>
.... more properties ...
.
Per maggiori dettagli vedere qui