随笔 - 119  文章 - 3173  trackbacks - 0
<2006年12月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

交友莫独酒,茅台西凤游。
口干古井贡,心徜洋河流。
称多情杜康,趟无量双沟。
赞中华巍巍,无此不销愁。

常用链接

留言簿(68)

随笔分类(136)

随笔档案(122)

最新随笔

搜索

  •  

积分与排名

  • 积分 - 520461
  • 排名 - 93

最新评论

为了让偶写的eclipse系统托盘插件EaseTray1.0插件能在eclipse启动时加载,泡了半天书店,在于找到了怎么让eclipse启动时执行指定的程序,离解决问题又近了一步。现在和大家分享下收获。

新建一个插件项目,增加一个org.eclipse.ui.startup扩展点,2006123101.jpg
指向直接写的test.EasyStartup类
EasyStartup:
 1 package test;
 2 
 3 import org.eclipse.swt.widgets.Display;
 4 import org.eclipse.ui.IStartup;
 5 
 6 public class EasyStartup implements IStartup {
 7     public void earlyStartup() {
 8         Display.getDefault().syncExec(new Runnable() {
 9             public void run() {
10                 System.out.println("hello start");
11             }
12         });
13     }
14 
15 }
作为插件运行,控制台会输出:
hello start

呵呵,小小的成功。
但是我还是无法获取IWorkbenchWindow对象。。。。。。。。
这样我的插件还是不能启动时强制加载并初始化。。。。。。。。
谁知道怎么获取IWorkbenchWindow!?
posted on 2006-12-31 14:38 交口称赞 阅读(3889) 评论(21)  编辑  收藏 所属分类: Eclipse RCP SWT

FeedBack:
# re: 让eclipse启动时执行指定的程序 2006-12-31 15:28 交口称赞
请知道的朋友指教下怎么弄  回复  更多评论
  
# re: 让eclipse启动时执行指定的程序 2006-12-31 16:35 BeanSoft
偶发现可以用 Display.getActiveShell (), 可以做个线程, 不停的循环检测... 但是怎么判断是不是 IWorkbenchWindow 偶就不清楚怎么搞了, 貌似有个朋友写的怎么运行时候更改 RCP 应用标题的时候有类似代码.  回复  更多评论
  
# re: 让eclipse启动时执行指定的程序 2006-12-31 17:29 交口称赞
要监听退出事件必须在IWorkbenchWindow对象加
不然实现不了退出时最小化
我在启动时能执行初始化,
但是获取不到shell
和IWorkbenchWindow  回复  更多评论
  
# re: 让eclipse启动时执行指定的程序 2006-12-31 17:36 交口称赞
你说的那篇文章我看了,他是用自己的products去取代eclipse的

相当于把eclipse的东西作为插件放到自己的产品中加载,

不是我想要的  回复  更多评论
  
# re: 让eclipse启动时执行指定的程序 2006-12-31 17:46 交口称赞
现在可以实现自动加载
最小化时候到托盘

关闭还不行
等都可以 了我再放新版本  回复  更多评论
  
# re: 让eclipse启动时执行指定的程序 2006-12-31 17:50 交口称赞
汗。。。。。。。。。
你天天在线啊
我试试

我刚才写的
Shell aa = Display.getCurrent().getActiveShell();
System.out.println(aa.getText());
for(Shell s :aa.getShells()) {
System.out.println(s.getText());
}

System.out.println("hello start");
没反应。。。。。。
试试他的  回复  更多评论
  
# re: 让eclipse启动时执行指定的程序 2006-12-31 17:59 BeanSoft
public static void changeAppTitle(String newTitle) {
Display display = Display.getDefault();
if (display != null) {
// Look at all the shells and pick the first one
// that is a workbench window.
Shell shells[] = display.getShells();
for (int i = 0; i < shells.length; i++) {
Object data = shells[i].getData();
// Check whether this shell points to the Application main window's shell:
if (data instanceof IWorkbenchWindow) {
shells[i].setText(newTitle);
break;
}
}
}
}

我试了应该可以, 只不过不要非法操作线程了..呵呵.今天来单位玩,所以在..  回复  更多评论
  
# re: 让eclipse启动时执行指定的程序 2006-12-31 18:00 交口称赞
瓦咔咔卡

找到了

package test;

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IStartup;
import org.eclipse.ui.IWorkbenchWindow;

public class EasyStartup implements IStartup {
public void earlyStartup() {
Display.getDefault().syncExec(new Runnable() {
public void run() {
Shell[] shells = Display.getCurrent().getShells();
System.out.println(shells.length);
for(Shell _shell :shells) {
if (_shell.getData() instanceof IWorkbenchWindow) {
System.out.println("找到了!");
}
}

System.out.println("hello start");
}
});
}

}

多谢。。。。。。。。。。

呵呵
明天发个完美版的插件。。。。。。。。。。。。。
终于能睡着觉了、
不枉今天受的书店老板的白眼
多谢BeanSoft   回复  更多评论
  
# re: 让eclipse启动时执行指定的程序 2006-12-31 19:34 交口称赞
哈哈
搞定了。
终于弄好了。  回复  更多评论
  
# re: 让eclipse启动时执行指定的程序 2007-01-24 13:51 alan
你好,我照你的方法去添加了这个扩展点,但在后台没有看到打印出信息,我用的是eclipse3.2.1,我的代码如下:
在plugin.xml中
<extension
id="loginDialog"
point="org.eclipse.ui.startup">
<startup class="rcp3.LoginDialog" />
</extension>
rcp3.LoginDialog的代码如下:
package rcp3;

import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IStartup;

public class LoginDialog implements IStartup {

public void earlyStartup() {
System.out.println("Hello");
Display.getDefault().syncExec(new Runnable() {
public void run() {
MessageDialog.openInformation(Display.getDefault()
.getActiveShell(), "Title", "Message");
}
});
}
}

后台根本没有打印出“Hello”,请问这是什么原因啊,谢谢!  回复  更多评论
  
# re: 让eclipse启动时执行指定的程序 2007-01-24 14:44 交口称赞
System.out.println("Hello");
写到run里面试试  回复  更多评论
  
# re: 让eclipse启动时执行指定的程序 2007-03-20 16:06 iceman
用这个试试。

public void earlyStartup() {
final IWorkbench workbench = PlatformUI.getWorkbench();
workbench.getDisplay().asyncExec(new Runnable() {
public void run() {
IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
if (window != null) {
System.out.println("hello start");
MessageDialog.openInformation(
window.getShell(),
"iceman Plug-in",
"Hello1, Eclipse world");
}
}
});
}  回复  更多评论
  
# re: 让eclipse启动时执行指定的程序 2007-05-30 11:47 Squall
其实这个可不可作为一个验证,当plugin启动时验证用户是否有合法使用权?  回复  更多评论
  
# re: 让eclipse启动时执行指定的程序 2007-05-30 12:24 交口称赞
可以,但是光这个不行。
你可以看看mueclipse怎么搞的  回复  更多评论
  
# re: 让eclipse启动时执行指定的程序 2007-05-30 16:19 Squall
你指myeclipse?但它不是免费的,代码也没有公开

现在想为开发的插件做一个注册,但找不到途径.....
  回复  更多评论
  
# re: 让eclipse启动时执行指定的程序 2007-05-30 20:31 交口称赞
但是他只有加密算法部分混淆了
其他的代码还是可以反编译看看的

问题是java这块很难做到不被破解  回复  更多评论
  
# re: 让eclipse启动时执行指定的程序 2007-05-31 09:35 Squall
至于破不破解就暂时忽略不计吧,

请问你知不知道,如果启动了eclipse后,有什么办法令插件停止使用

我试过在earlyStartup()里获得那个插件对象后,

调用shutdown(),getBundle().stop()都不行,插件仍然可以使用  回复  更多评论
  
# re: 让eclipse启动时执行指定的程序 2007-05-31 10:22 交口称赞
我觉得你想反了
你功能插件去调用你的验证插件
验证通过就给用,不通过不给用
每个重要的方法都验证一下

验证插件就是一个服务
而不要反过来用验证插件去控制其他的插件
验证插件应该是被动的

  回复  更多评论
  
# re: 让eclipse启动时执行指定的程序 2007-05-31 11:01 Squall
也就是说关于这个插件的每一个功能,如:“新建项目功能”,“运行应用功

能”等,每调用到相关功能(即调用相关方法)之前验证一下?

根据你所说的,我想到如果启动时就是说插件的start()方法调用时,

设一个boolean标志位,然后在调用相关的功能方法时查询这个标志位,

再决定是否继续执行,你的意思是不是大概是这样?  回复  更多评论
  
# re: 让eclipse启动时执行指定的程序 2007-05-31 12:14 交口称赞
也就是说关于这个插件的每一个功能,如:“新建项目功能”,“运行应用功

能”等,每调用到相关功能(即调用相关方法)之前验证一下?

是这样的。

当我觉得最好不要去直接验证标志位,这样太容易被破解了。
去调用方法去验证。
最好搞个线程什么的。
反正越绕越好越复杂越好。。。。。

欢迎有经验的朋友一起讨论  回复  更多评论
  
# re: 让eclipse启动时执行指定的程序 2015-02-04 17:45 suren
学习了。

来自:素人派
http://surenpi.com  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: