日期:2014-05-20  浏览次数:20768 次

swt 添加数据库记录 assertion failed: ContentViewer must have a content provider when input is set.
程序主要是实现数据库管理
主界面显示数据库的全部记录
有添加功能

事件处理过程:
addbtn=new Button(panel,SWT.NONE);
addbtn.setText("添加");
addbtn.addSelectionListener(new SelectionAdapter(){
  public void widgetSelected(SelectionEvent event){
  newaddscheduler=new Addscheduler(display);///子界面 数据的输入界面
  AllBean ab=new AllBean();
// scheduler_tableViewer.setContentProvider(new ContentProvider());
// scheduler_tableViewer.setLabelProvider(new TableLabelProvider());
  scheduler_tableViewer.setInput(ab.getschedulers());
  scheduler_tableViewer.refresh();
  }
  });
子界面的退出按钮只有 shell.dispose();

我不知道哪里错了呀...弄了一个早上..完全找不到北...

因为它提示的是这个异常..我还尝试过加上被注释掉的那两种代码..可是添加后异常就变成" org.eclipse.swt.SWTException: Widget is disposed...

到底是什么问题呢? 我刚刚开始学SWT..先谢谢帮忙...


------解决方案--------------------
assertion failed: ContentViewer must have a content provider when input is set!
应该是scheduler_tableViewer.setInput(ab.getschedulers()); 吧!
org.eclipse.swt.SWTException: Widget is disposed
是因为你的对象已经销毁了,你不能对已经销毁的对象进行任何操作!
------解决方案--------------------
viewer都需要搭配ContentProvider和LabelProvider使用,ContentProvider提供数据,LabelProvider提供显示。
这是JFace的基础

------解决方案--------------------
一楼的说的很对,如果你还要操作这个界面的话建议你不要 销毁他(dispose())
最好用 .setVisible(boolean);