问题描述:

在《NetBeans Platform 6.9 Developer's Guide》第二章末尾有一步将自己设计的Panel加入Palette中,以方便使用。但在按书中所写加入,在定位到TaskEditor模块后,却找不到TaskEditorPanel。结果发现TaskEditorPanel.java中有这样一句

private Task task = new TaskImpl();

而在TaskModel模块中只暴露了com.netbeansrcp.taskmodel.api包,而没有暴露com.netbeansrcp.taskmodel这个实现类TaskImpl所在的包。(其实这个包确实不应该暴露,书后面部分给出了解决方法,但行文至此,必须暴露这个包才能编译通过)

 

这样,在编辑TaskEditorPanel.java文件时是不会提示错误的,而在build会报错。

而在没有build的情况下,要将TaskEditorPanel加入Palette中,就会发现找不到而无法加入。

 

临时的解决方法就是将com.netbeansrcp.taskmodel暴露出来,并build,然后在加入就可以找到了。

当然最终的解决方式还是令TaskEditor模块不要依赖TaskImpl。

 ___________________________________________________________

又出问题了,在按书中所讲,将

private Task task = new TaskImpl();

改为

public Task task = new TaskImpl();

后,TaskEditorTopComponent设计面板无法显示。

而且Palette面板上新增加的项目也报有问题。

各种办法不起作用,谁知道怎么回事啊?

 -----------------------------------------------------------------------------

书中前后有矛盾的地方,看书的时候要注意,例如:

20页中有

Create a subpackage named api and define the Task interface as follows...

92页又有

Move the Task class to the com.netbeansrcp.taskmodel.api too...

 

另外包名有时候是com.netbeansrcp,有时候又变成org.netbeansrcp

-------------------------------------------------------------------------------

 
http://www.iteye.com/problems/67224

原因是这样子的:
TaskImpl中的构造方法中有这么一段代码:
TaskIdGenerator idGen = Lookup.getDefault().lookup(com.netbeansrcp.taskidgenerator.api.TaskIdGenerator.class);
this.id = idGen.generateID();

在界面设计器中打开时,由于在TaskEditorPanel中需要调用该构造方法,此时NetBeans不能正确的使用LookUp方法查找到对应的TaskIdGenerator,所以报了NullPointerException。

通过View->IDE Log可以查看到报错的具体信息。

 

 

 

posted on 2011-08-11 13:40  网络大豆  阅读(464)  评论(0编辑  收藏  举报