问题描述:
在《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
-------------------------------------------------------------------------------
原因是这样子的:
TaskImpl中的构造方法中有这么一段代码:
TaskIdGenerator idGen = Lookup.getDefault().lookup(com.netbeansrcp.taskidgenerator.api.TaskIdGenerator.class);
this.id = idGen.generateID();
在界面设计器中打开时,由于在TaskEditorPanel中需要调用该构造方法,此时NetBeans不能正确的使用LookUp方法查找到对应的TaskIdGenerator,所以报了NullPointerException。
通过View->IDE Log可以查看到报错的具体信息。
傲轩游戏网