用eclipse做插件报错,求大神指点

IBSFinback 2017-12-21 10:20:13
我在eclipse上用java写了个插件,功能是读取xml文件里面的特定信息,并把读取到的内容在一个表格中显示出来。
目前的状况是,一方面我已经做出了表格,另一方面可以单独实现对xml文件的读取,但是表格显示的内容是在源代码里面内置的,无法将xml读取的内容给到表格,代码如下:
这是显示表格的类
package xmlplugin.view;

import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.part.ViewPart;

import xmlplugin.model.RecordFactory;

public class View extends ViewPart {

public void createPartControl(Composite parent){
// TODO Auto-generated method stub
Composite topComp = new Composite(parent, SWT.NONE);
topComp.setLayout(new FillLayout());
TableViewer tv = new TableViewer(topComp,SWT.H_SCROLL|SWT.V_SCROLL|SWT.BORDER|SWT.FULL_SELECTION);
Table table = tv.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
TableLayout layout = new TableLayout();
table.setLayout(layout);

layout.addColumnData(new ColumnWeightData(50));
new TableColumn(table,SWT.NONE).setText("name");
layout.addColumnData(new ColumnWeightData(50));
new TableColumn(table,SWT.NONE).setText("age");
tv.setContentProvider(new XMLTableViewerContentProvider());
tv.setLabelProvider(new XMLTableViewerLabelProvider());

Object recorddata = RecordFactory.getRecord();

tv.setInput(recorddata);
}

public void setFocus() {
// TODO Auto-generated method stub
}
}
这是相应的标签容器和内容器
package xmlplugin.view;

import java.util.List;

import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;

public class XMLTableViewerContentProvider implements IStructuredContentProvider{

public void dispose() {
// TODO Auto-generated method stub

}

public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// TODO Auto-generated method stub

}

public Object[] getElements(Object inputElement) {
// TODO Auto-generated method stub
if(inputElement instanceof List)
return ((List)inputElement).toArray();
else
return new Object[0];
}

}

package xmlplugin.view;

import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.swt.graphics.Image;

import xmlplugin.model.RecordEntity;

public class XMLTableViewerLabelProvider implements ITableLabelProvider{

public void addListener(ILabelProviderListener listener) {
// TODO Auto-generated method stub

}

public void dispose() {
// TODO Auto-generated method stub

}

public boolean isLabelProperty(Object element, String property) {
// TODO Auto-generated method stub
return false;
}

public void removeListener(ILabelProviderListener listener) {
// TODO Auto-generated method stub

}

public Image getColumnImage(Object element, int columnIndex) {
// TODO Auto-generated method stub
return null;
}

public String getColumnText(Object element, int columnIndex) {
// TODO Auto-generated method stub
RecordEntity r = (RecordEntity)element;
if(columnIndex==0)
return r.getName();
if(columnIndex==1)
return r.getAge();
return null;
}
}
这是为了存储从xml读取的变量和给表格赋值的类
package xmlplugin.model;

public class RecordEntity {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}

}

package xmlplugin.model;

import java.util.ArrayList;
import java.util.List;

import xmlplugin.util.XMLParse;

public class RecordFactory {
public static List getRecord(){
List list = new ArrayList();
RecordEntity r = new RecordEntity();
r.setName("sss");
r.setAge("18");

list.add(r);
return list;
}
}
这是读取xml文件的类
package xmlplugin.util;

import org.dom4j.Document;
import org.dom4j.DocumentException;
//import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;



public class XMLParse {
public static String FILEPATH="F:\\test.xml";
public static String get(String filepath){
SAXReader reader = new SAXReader();
Document document = null;
try {
document = reader.read(filepath);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Element root = document.getRootElement();
Element re = root.element("re");
String output = re.attributeValue("name");
return output;
}
}
在内置(setName方法直接给双引号中间写字符串的形式)表格要显示的内容的时候一切正常,但是一旦把内置改成调用XMLParse类里面的方法来赋值的时候就出错了,但是xml得读取一切正常,求大神帮忙看看哪里出问题了,感激不尽。
图1位正常情况下的表格,图2则是对xml读取的验证,图3是将内置改为调用方法,图4是修改后表格的样子。
xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<va>
<cba>321</cba>
</va>
<re
name="ccc"
age="999">
</re>
</root>



...全文
386 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Plumsq 2017-12-29
  • 打赏
  • 举报
回复
如果不行,QQ联系1332657754
Plumsq 2017-12-29
  • 打赏
  • 举报
回复
看最后一图报错的图片,貌似是环境的问题,好好看一下导入的jar包是否正确,是否有冲突。 表格那里应该没事。标签器和内容器都正确的。

58,452

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧