RCP:如何保存TaskList及如何获取TaskList
如果我们在Eclipse RCP程序中添加TaskList View,用来管理Task或者TODO项,如下代码:
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
.showView("org.eclipse.ui.views.TaskList");
我们发现,创建的Task,在重启之后无法保存,而在Eclipse IDE中却不会有这个问题. 在阅读org.eclipse.ui.internal.views.markers.TasksView的代码后,我发现TasksView在程序退出时,只负责保存TasksView的布局信息。那么,需要怎么保存添加的Task呢?
如何保存TaskList
原来Task的本质是Marker,并不是保存在TasksView中,而是和Resource相关联,保存在IResource对象中。在RCP程序中,保存Marker需要调用IWorkspace的save方法,可以在preShutdown中调用,如下代码:
@Override
public boolean preShutdown() { /* Save workspace before closing the application */
final MultiStatus status = new MultiStatus(
"com.voxana.vuidesigner.diagram", 0, "Saving Workspace....",
null);
IRunnableWithProgress runnable = new IRunnableWithProgress() { @Override
public void run(final IProgressMonitor monitor) {
try {
IWorkspace ws = ResourcesPlugin.getWorkspace();
status.merge(ws.save(true, monitor));
} catch (CoreException e) {
status.merge(e.getStatus());
}
}
};
try {
new ProgressMonitorDialog(null).run(false, false, runnable);
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
if (!status.isOK()) {
ErrorDialog.openError(Display.getDefault().getActiveShell(),
"Error...", "Error while saving workspace", status);
return true;
}
return true;
}
获取TaskList
如前面所说,Task(Marker的其中一种类型)是和Resource关联,保存在IResource中的。我们可以通过以下代码来获取所有Task:
IResource root = ResourcesPlugin.getWorkspace().getRoot();
String TypeId = "org.eclipse.core.resources.taskmarker";
IMarker[] markers = resource.findMarkers(TypeId, true, IResource.DEPTH_INFINITE);
其中,第一个参数TypeId指定要获取的Marker类型;第二个参数指定是否搜索子节点的Marker;第三个参数指定搜索的深度。
在获取了IMarker后,即可通过getAttribute或者getAttributes方法来获取参数
参考
http://www.eclipse.org/forums/index.php/t/106705/
http://wiki.eclipse.org/FAQ_How_and_when_do_I_save_the_workspace%3F
org.eclipse.ui.internal.views.markers.MarkerContentGenerator class internalGatherMarkers method
RCP:如何保存TaskList及如何获取TaskList的更多相关文章
- C#操作office进行Excel图表创建,保存本地,word获取
,新建C#控制台应用程序(Excel创建图表) using System; using System.Collections.Generic; using System.Linq; using Sys ...
- cookie保存中文登录账号获取时乱码问题
登录成功后写入cookie的代码 Response.Cookies["account"].Value = account;//"管理员" Response.Co ...
- .net Core 2.1 后 Session保存,新页面获取不到值
https://blog.csdn.net/kuui_chiu/article/details/81060051 https://blog.csdn.net/niunan/article/detail ...
- DOS tasklist 命令(转)
Dos命令之Tasklist用法及参数函义 2012-10-24 14:44:34| 分类: Windows |字号 订阅 TASKLIST [/S system [/U username [/ ...
- Tasklist and TaskKill
C:\Users\Administrator>tasklist /? TASKLIST [/S system [/U username [/P [password]]]] [/M ...
- (转)tasklist命令参数应用详细图解
原文:https://blog.csdn.net/bcbobo21cn/article/details/51759521 一 操作实例不带参数: /svc参数: /SVC 显示每个进程中的服务信息,当 ...
- CMD命令利用tasklist与taskkill关闭程序
昨天远程服务器后,服务器无故卡住了,鼠标各种延迟与无反应,想在进程管理器里关闭程序也卡住,想点击重启系统也卡死无反应.纠结后win+R打开了cmd用shutdown重启才算搞定.重启期间思考了下,如何 ...
- C# -- 优先获取电脑C盘之外的磁盘来保存数据
C# -- 优先获取电脑C盘之外的磁盘来保存数据 1. 优先获取电脑C盘之外的磁盘来保存数据.没有其他盘则使用C盘. public string GetSaveDataDiskPath() { str ...
- Windows ----tasklist/taskkill
1) Tasklist命令详解 “Tasklist”命令是一个用来显示运行在本地或远程计算机上的所有进程的命令行工具,带有多个执行参数. 作用:结束一个或多个任务或进程.可以根据进程 ID 或图像名来 ...
随机推荐
- .net Sql语句批量插入数据库数据
#region 使用SqlBulkCopy public static bool ExecuteTransactionScopeInsert(DataTable dt, int batchSize) ...
- # 20145334赵文豪 《Java程序设计》第5周学习总结
20145334赵文豪 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 1.使用try.catch打包System.in.read(),声明throws java.io.IO ...
- 20145334赵文豪 《Java程序设计》第4周学习总结
20145334赵文豪 <Java程序设计>第4周学习总结 教材学习内容总结 第六章知识点总结 1-继承共同行为:如果在程序设计上存在着重复,那就需要修改,可以吧相同的程序代码提升(pul ...
- Windows内核 字符串基本操作
驱动程序中字符串操作涉及到ASCII字符串.宽字符串,还有DDK定义的ANSI_STRING数据结构和UNICODE_STRING数据结构. 1)ASCII字符串和宽字符串 在应用程序中使用两种字符: ...
- Code Snippet
Code Snippet: http://msdn.microsoft.com/en-us/library/z41h7fat.aspx CodePlex.Snippets 4.0 - Visual S ...
- How to bind data to a user control
http://support.microsoft.com/kb/327413 Create a user control by inheriting from the System.Windows. ...
- P1026 统计单词个数
题意 给出一段字符串和一个字典,把字符串划分为n个连续的子串,求一种最优的划分方式使字符串所含单词数最大.(详见NOIp2001) 思路 这个题是一个很典型的线性dp,难点主要在预处理上. 理解题意后 ...
- 解决ssh登录后闲置时间过长而断开连接
++++++++++++++++++++++++++++ #!/usr/bin/env bash password_5="Uxxx7"host_5="129.x.x.1 ...
- Qt中使用ActiveX(3篇)
由于最近需要使用ActiveX,一般来说可以使用微软提供的MFC或者ATL框架来开发,由于我个人对这部分内容不是很熟悉,好在Qt也提供对于ActiveX的支持.本文主要记录个人学习ActiveX的一些 ...
- [LeetCode]题解(python):119 Pascal's Triangle II
题目来源 https://leetcode.com/problems/pascals-triangle-ii/ Given an index k, return the kth row of the ...