标签: eclipse-rcp

在SWT/JFace RCP应用程序中填充巨大的表

您如何在SWT表中显示大量行?巨大的是20K行,20列.不要问我为什么需要显示那么多数据,这不是重点.关键是如何让它尽可能快地工作,以便最终用户不会感到无聊等待.每行显示一些对象的实例,列是其属性(一些).我想使用JFace内容/标签提供程序模式,但担心它会比直接用数据命中表更慢.这是怎么回事:

    Display.getDefault().asyncExec(new Runnable() {
       public void run() {
           List<MyObject> objects = model.getViewData();
           for(MyObject object: objects){
           TableItem item = new TableItem(table, SWT.NULL);
           item.setImage(0, img1);
           item.setBackground(color1);
               item.setText(0, object.getProperty0());
               item.setText(1, object.getProperty1());
               item.setText(2, object.getProperty2());
               ..... 
            }
       });
Run Code Online (Sandbox Code Playgroud)

在我的计算机上绘制20k记录大约需要20秒.我在Windows中遇到的最大性能问题是由新建表项创建和填充文本时由SWT发送的大量本机窗口消息引起的.我找到了很好的解决方法 - 在填充之前隐藏表,然后在完成后显示它.只需在循环之前调用table.setVisible(false),在循环之后调用table.setVisible(true)就可以了 - 速度上升了六七倍!

我想加快速度.你会建议什么?另外,我想知道隐藏小部件的这个技巧如何在SWT(又称Linux)的非Windows实现上起作用?

java swt jface eclipse-rcp

11
推荐指数
1
解决办法
9793
查看次数

覆盖Eclipse文件>保存操作

我试图覆盖Eclipse文件>保存菜单操作以添加一些功能.我尝试过以下的事情

a)创建一个新动作并将其添加到全局动作处理程序

actionBars.setGlobalActionHandler(ActionFactory.SAVE.getId(), mySaveAction); actionRegistry.registerAction(action);

b)创建一个新的处理程序并覆盖save命令

<extension point="org.eclipse.ui.handlers">
<handler commandId="org.eclipse.ui.file.save"
  class="com.diagrams.ui.SaveFileHandler">
<enabledWhen> 
  <with variable="activePartId">
  <equals 
    value="com.diagrams.editors.MultiPageEditor" />
  </with>
</enabledWhen>
<activeWhen>
  <with variable="activePartId">
  <equals 
  value="com.diagrams.editors.MultiPageEditor" />
  </with>
</activeWhen>
</handler>
</extension> 
Run Code Online (Sandbox Code Playgroud)

通过这两种方法,我可以覆盖键盘Ctrl + S功能,但"文件>保存"菜单似乎工作方式不同.

非常感谢任何帮助,谢谢

eclipse overriding file save eclipse-rcp

11
推荐指数
1
解决办法
4612
查看次数

如何在我的Eclipse RCP应用程序中添加git哈希关于页面?

在过去,使用mercurial和Visual Studio,我曾经在我的应用程序中添加mercurial changeset id,这样当用户执行Help About时,它会列出所有组件及其确切的 mercurial修订版.它还会在每次启动时将所有变更集ID记录到应用程序日志文件中.这个过程甚至允许我查看自上次提交以来是否修改了特定的工作副本(mercurial hg id指示通过在其报告的变更集ID的末尾添加+来表示脏工作副本).

这是非常有用的,因为这意味着任何时候用户报告的问题,我可以快速地建立正是他们正在使用的版本.我还可以告诉人们什么时候在快速黑客中偷偷摸摸解决问题,既没有做出改变也没有告诉我这件事.

我现在想在git托管的RCP应用程序中复制相同的工具.不幸的是,我对gitEclipse RCP应用程序开发都很陌生,所以我有点不清楚相同的技术是否会起作用.

特别是我一直无法弄清楚如何hg id使用git,如何让Eclipse构建系统调用git以创建.gitignore包含id 的d文件,以便可以将其编译到应用程序/插件中,或者如何将此信息导入"帮助">"关于"页面.

如果你已经完成了这个或类似的事情,我会喜欢你如何做到的一些指示.或者,我很乐意听到关于实现我所寻求的最终结果的替代方法的任何建议.


有点google-fu,阅读线条和实验,它看起来git rev-parse HEAD或者git rev-parse --short HEAD可能是最接近的hg id,唉,我找不到方法来表明工作副本不干净,所以看起来我会必须检查a的输出,git status --short如果它不为空,+则手动将a附加到提交哈希.

现在我只需要了解如何从Eclipse构建系统运行这些命令以及在何处注入此信息,以便它显示在About页面中.

git eclipse-rcp

11
推荐指数
1
解决办法
544
查看次数

Eclipse RCP哪个shell用于弹出窗口

我试图在Eclipse RCP中获取一个shell并在我的应用程序中调出弹出窗口,并通过几个资源/教程来完成任务但没有太多运气.

尝试:

Display.getCurrent().getActiveShell();
Run Code Online (Sandbox Code Playgroud)

要么

Display.getDefault().getActiveShell();
Run Code Online (Sandbox Code Playgroud)

要么

  PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
Run Code Online (Sandbox Code Playgroud)

有时甚至是

 Display.getDefault().getShells()[0];
Run Code Online (Sandbox Code Playgroud)

但是不同的事情似乎在不同的情况下起作用.

在线资源有不同的观点,我发现大多数事情说你根本不应该真正使用这个Display类,但我试图在日食工作中提出一个弹出窗口.它已经结束并失败,弹出窗口需要显示:

码:

        Display.getCurrent().syncExec(new Runnable() {

            @Override
            public void run() {

                    MessageDialog.openError(Display.getDefault().getActiveShell(), "Publish", e.getMessage());


            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

弹出窗口是从从Eclipse作业启动的线程执行的Runnable内部.这很复杂但是必须在服务器上调用同步方法时提供进度条更新.

它不起作用,我不知道为什么.从getActiveShell()调用中获取null.

真正的问题不是'为什么我的代码不能正常工作',而是在Eclipse RCP框架中为弹出窗口获取shell的确切正确方法,特别是在无法访问工作台的情况下?

java popup eclipse-rcp

11
推荐指数
1
解决办法
4079
查看次数

如何避免eclipse目标定义中的特定功能版本

我有一个osgi项目,分为3个存储库.每个存储库都有自己的构建到使用Tycho的p2存储库:

Repo1 -> P2 repo 1
Repo2 -> P2 repo 2
Repo3 -> P2 repo 3
Run Code Online (Sandbox Code Playgroud)

此外,每个存储库都有一个目标定义文件,其中包含来自第三方p2存储库和另一个项目存储库的捆绑包(上面的P2 repo1,P2 repo 2或P2 repo 3).Repo2包含对Repo1包的依赖,Repo3与Repo1和Repo2包有依赖关系:

Repo1 Target Definition -> Eclipse Orbit P2
Repo2 Target Definition -> Eclipse Orbit P2, P2 repo1
Repo3 Target Definition -> Eclipse Orbit P2, P2 repo1, P2 repo2
Run Code Online (Sandbox Code Playgroud)

现在我有以下问题.构建第一个存储库后,P2 repo1存储库已更新,并包含具有新快照版本的功能.Repo2和Repo3的目标定义取决于Repo1包的先前快照版本,如果不更新相应的目标定义,则无法构建这些存储库(在Eclipse中,目标编辑器中有更新按钮).

<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
<unit id="com.myproduct.feature.api.game.feature.group" version="1.0.0.201509251400"/>
<unit id="com.myproduct.feature.impl.game.feature.group" version="1.0.0.201509251400"/>
<repository location="http:............../target/repository/"/>
</location>
Run Code Online (Sandbox Code Playgroud)

所以不可能自动构建所有3个repos,因此构建过程变得过于复杂:

  • 在第一个repo中提交更改并使用Jenkins构建它
  • 更新repo2的目标定义,将其指向新版本的repo 1功能
  • 在repo2中提交此更新并使用Jenkins构建它

等等....

我现在想使用git子模块来集成这3个repos以避免p2存储库或在一个存储库中移动所有存储库.

java eclipse osgi eclipse-rcp tycho

11
推荐指数
1
解决办法
834
查看次数

Eclipse/WindowBuilder Pro的一些教程

我正在寻找有关如何使用window builder pro编写rcp程序的教程,任何资源链接,好吗?

非常感谢.

eclipse-rcp windowbuilder

10
推荐指数
1
解决办法
4万
查看次数

使用Maven构建Eclipse插件

我正在尝试配置Maven来构建Eclipse应用程序(与所有Eclipse EXE打包在一起的Eclipse插件等).

我已经完成了项目的几十个依赖项,并将它们部署到我们的内部Nexus(OSS)服务器.我还安装了Nexus P2 Repository插件和P2 Bridge插件(2.6.3-01)以及Nexus Unzip插件(0.12.0).我可以浏览到我们的组存储库的.meta/p2文件夹,但它当前是空的.

这应该比目前看起来简单得多.我的目标是Windows上的Eclipse 3.4.2(Ganymede).如果它有所不同,我们实际上将我们的应用程序部署为精简版/自定义Eclipse安装.

Eclipse的仓库

当我对着pom运行maven时,<packaging>eclipse-repository</packaging>我收到以下错误:

[ERROR]   Missing requirement: MyApp 0.0.0 requires 
          'org.eclipse.equinox.executable.feature.group 0.0.0' 
          but it could not be found
Run Code Online (Sandbox Code Playgroud)

...我从哪里获得,以及如何将其添加到Nexus?

当我对着pom运行maven时,<packaging>eclipse-plugin</packaging>我收到以下错误:

[ERROR]   Missing requirement: MyApp 0.0.0 requires 
          'bundle org.eclipse.ui 0.0.0'
          but it could not be found
Run Code Online (Sandbox Code Playgroud)

...但是我在本地文件系统上找到了以下目录(怀疑itp-04-rcp生成了第一个目录):

D:\maven\repository\p2\osgi\bundle\org.eclipse.ui\3.6.2.M20110203-1100
D:\maven\repository\p2\osgi\bundle\org.eclipse.ui\3.7.0.v20110928-1505
Run Code Online (Sandbox Code Playgroud)

第谷POM-第一件文物

我还尝试了pom-first-dependencies和manifest-first-dependency组合:http://wiki.eclipse.org/Tycho/How_Tos/Dependency_on_pom-first_artifacts

我不明白这是如何工作的 - 我可以从Git构建itp02.我可以看到它构建了两个包:

+---------------------+---------------------+--------------------------------------+
| artifactId          | Bundle-Name         | Bundle-SymbolicName                  |
+---------------------+---------------------+--------------------------------------+
| pomfirst-bundle     | pomfirst-bundle     | tycho.demo.itp02.pomfirst-bundle     |
| pomfirst-thirdparty | pomfirst-thirdparty | tycho.demo.itp02.pomfirst-thirdparty | …

eclipse-plugin p2 eclipse-rcp tycho maven

10
推荐指数
1
解决办法
4034
查看次数

添加单个选择和上下文相关右键单击Zest Graph

我一直在玩Zest GraphViewer超过一个星期,现在试图发现它可以为我的应用程序做些什么,但到目前为止我还没有能够满足我的要求.

我希望有人可以指出我需要的资源,因为我无法找到与Google一起使用的所有资源,或者可以告诉我我的想法是否可行.

我已经在RCP项目的依赖项中获得了Zest核心1.3.0和Zest布局1.1.0.这来自我从Zest网站上下载的网站.

要求

  • 单节点/边缘选择.
  • 选择空白时取消选择节点/边缘(这可能是一个错误?)
  • 右键单击功能可在节点上进行更改.(当鼠标在节点上时检测)

右键单击功能可以来自单一选择,因为我可以在任何地方使用弹出窗口,但是它基于当前所选节点,但我宁愿不这样做.

由于性质或我们的应用程序和用户,我无法做到这一点,我可能还需要找到另一个具有此功能的基于RCP/SWT的Graph绘图包.

任何这些问题的任何帮助将不胜感激.

格伦x

java swt graph eclipse-rcp zest

10
推荐指数
1
解决办法
1237
查看次数

JFace TableViewer与TreeViewer - 性能

是否有人注意到a TreeViewer和a 之间存在巨大的性能差异TableViewer(TreeViewer更快).

我有一个包含CellEditors(带EditingSupport)约30列的表,当我滚动它时,特别是水平,它非常慢.多细胞选择也很慢.

我将表更改为树(只是将主页更改TableViewer为a TreeViewer和特定类)并且获得了巨大的性能提升.

为什么是这样?表和树都具有相同的结构,实现和扩展相同的类,树是具有更多功能的树.这是在较新版本的eclipse中修复的,还是我只是将我的表迁移到没有孩子的树上?

PS我在win7上使用SWT和JFace 3.7.

提前致谢.

java swt jface eclipse-rcp

10
推荐指数
1
解决办法
733
查看次数

SWT浏览器专注于下一个和上一个高亮文本

我正在使用SWT Browser小部件开发一个小应用程序.我正在突出显示搜索文字

<a id="xyz" href=''><mark>test</mark></a>
Run Code Online (Sandbox Code Playgroud)

在HTML文档中.并以这种方式替换HTML Text中的所有搜索词,以便我们突出显示所有搜索词.

    htmltext.replaceAll("(?i)"+Pattern.quote(searchword), "\\<a id='xyz' href=''> <mark>$0\\</mark></a>
Run Code Online (Sandbox Code Playgroud)

我想实现功能,如果我点击下一个按钮,下一个突出显示的单词应该得到焦点,如果我点击上一个按钮,前一个突出显示的文本应该得到焦点.如何在Eclipse RCP应用程序中使用Javascript完成Next和Previous Hit.

javascript java browser swt eclipse-rcp

10
推荐指数
1
解决办法
457
查看次数