2012-01-25 11 views
4

データを削除し、新しいデータに従ってユーザーインターフェイスを更新するストアドプロシージャを実行するためにorg.eclipse.core.runtime.jobs.Jobを使用します。したがって、ユーザーがEclipseアプリケーションを閉じてもこのジョブが完了することが重要です。ユーザーがEclipseアプリケーションを閉じたときにジョブを完了する方法

final Job execStoredProcJob = new Job(taskName) { 
    protected IStatus run(IProgressMonitor monitor) { 
     monitor.beginTask(taskName, 
// execute stored procedure 
// update user interface 
     monitor.done(); 
     return Status.OK_STATUS; 
    } 
}; 

execStoredProcJob.schedule(); 

ジョブを実行している間にEclipseアプリケーションを閉じると、ジョブを強制終了するようです。ユーザーがEclipse Appを閉じた後でジョブを完了するにはどうすればいいですか?出来ますか?

+0

可能な複製http://stackoverflow.com/questions/515993/what-is-the-correct-way-to-add-a-shutdown-hook-for-an-eclipse -rcp-application – katsharp

答えて

1

は、私はあなたがあなたのプロジェクトへの参照を持っている場合project.getWorkspace().getRoot()のように達成することができるスケジューリングルール http://www.eclipse.org/articles/Article-Concurrency/jobs-api.html

execStoredProcJob.setRule([Workspace root]); 
execStoredProcJob.schedule(); 

[ワークスペースのルート]を見てみたいと思うかもしれません。

これは、同じ規則を必要とするすべてのジョブをブロックします。そして、使用

IWorkspace myWorkspace = org.eclipse.core.resources.ResourcesPlugin.getWorkspace(); 

:シャットダウン・ジョブは

それはすることも可能です。..それらの一つである

myWorkspace.getRoot(); 
+0

ワークスペース全体のスケジューリングルールは、ワークベンチがシャットダウンされる前に他のものが実行されるのをブロックするので、少し劇的かもしれません。リソースに基づいて可能な最小のルールを見つけ出し、それを使用します。すべての 'IResource'も' ISchedulingRule'であることを忘れないでください。 –

+0

私は同意します。このページhttp://help.eclipse.org/helios/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fruntime_jobs.htmには、シャットダウンする前にジョブを完了するためのヘッダーがあります。それは、プラグインの「停止」方法ですべてのジョブが完了していることを確認することを提案します。これは、Eclipseが存在する前に終了する必要があります。 – Enrico

+0

この方法には注意してください。プラグインが停止し、依存しているインフラストラクチャーの一部が消えてしまったときに、すでに停止しているプラ​​グインが分からないことがあります。また、これは、待機中の状態を正しく表示するために、コアプラグインにUIアクセスが必要な場合があります。 –

0
スケジューリングルールに代わるものはどれかを参加すること WorkbenchAdvisor.preShutdown()にコードを追加することです

あなたが持っている優れた仕事...

関連する問題