在其他类中调用 swt table

现在要实现一个功能,在其他类中调用我自己创建的view中的table,使table刷新数据库的数据,但是奇怪的是他在

TableItem item=new TableItem(table,SWT.NONE);这一行却报错Argument can not be null的错。我一直不知道该怎么解决这个问题,因为我在自己的类中调用这行代码是没有错的。在和朋友的商量下查看,才发现,我在其他类中调用该类的方法时,是以如下形式调用的

TableView tableView=new TableView();

tableView.updateTable();

并在该行报错,后来才知道,主要有两点问题存在:

 1)RCP中的View是单例模式,我不能重新实例化该view,应该以如下形式来做

在TableView中添加如下代码:

	private static TableView tableView;
	private static Table table;
	public static TableView getTableView() {
		if (tableView == null) {
			tableView = new TableView();
		}
		return tableView;
	}

并在调用该类的其他地方这样写:

TableView.getTableView().updateTable();(并注意红色字体部分,这里table必须以静态变量存在)


2)在完成上面的工作后,程序还是会报线程访问错误

   这是因为RCP的UI线程与非UI线程的问题,这也是为什么我在自己的程序中创建table数据没有错,在其地方调用创建table数据却报错的原因。下面贴上updateTable完整的方法

public void updateTable() {
		Display.getDefault().asyncExec(new Runnable() {

			@Override
			public void run() {
				TableItem item = null;
				Soldier soldierBasic = null;
				SoldierRT soldierRT = null;
				List<Soldier> soldiersOnline = SoldierOnOffManage.getInstance()
						.getSoldiersOn();
				for (int i = 0; i < soldiersOnline.size(); i++) {
					soldierBasic = new Soldier();
					soldierRT = new SoldierRT();
					soldierBasic = soldiersOnline.get(i);
					soldierRT = SoldierOnOffManage.getInstance()
							.getSoldierRTByLid(soldierBasic.getLid());

					item = new TableItem(table, SWT.NONE);
					item.setText(new String[] { soldierBasic.getName(),
							soldierBasic.getPid(), soldierBasic.getSex(),
							soldierBasic.getPosition(),
							"" + soldierBasic.getAge() + "",
							soldierRT.getBreathrate(),
							soldierRT.getHeartrate(),
							soldierRT.getWalkrate(),
							soldierRT.getSportamount(),
							soldierRT.getPose(),
							soldierBasic.getBoold_type(),
							soldierBasic.getLid(),
							soldierRT.getCurTime().toString(),
							soldierRT.getLat(),
							soldierRT.getLon(),
							soldierBasic.getDrug_allergy() });
				}
			}
		});

	}

如此错误就解决了


  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值