问题描述
请问:我在ViewPart中创建了一个表格,表格数据为ArrayList,然后我创建一个线程,在此线程中改变ArrayList的值,我想改变值后能刷新表格,试了很多方式,都失败了,一下是我的ViewPart代码:publicvoidcreatePartControl(Compositeparent){viewer=newTableViewer(parent,SWT.MULTI|SWT.H_SCROLL|SWT.V_SCROLL|SWT.FULL_SELECTION);viewer.setContentProvider(newWidgetOneViewContentProvider());viewer.setLabelProvider(newWidgetOneViewLabelProvider());viewer.setSorter(newNameSorter());//viewer.setInput(getViewSite());viewer.getTable().setHeaderVisible(true);viewer.getTable().setLinesVisible(true);TableColumntableColumn1=newTableColumn(viewer.getTable(),SWT.NONE);tableColumn1.setWidth(250);tableColumn1.setText("Description");TableColumntableColumn2=newTableColumn(viewer.getTable(),SWT.NONE);tableColumn2.setWidth(500);tableColumn2.setText("Detail");TableColumntableColumn3=newTableColumn(viewer.getTable(),SWT.NONE);tableColumn3.setWidth(250);tableColumn3.setText("Date");list=newArrayList<WidgetOneLog>();WidgetOneLoglog=newWidgetOneLog("aaa","bbb","ccc");list.add(log);viewer.setInput(list);//Createthehelpcontextidfortheviewer'scontrolPlatformUI.getWorkbench().getHelpSystem().setHelp(viewer.getControl(),"WidgetOneLogProject.viewer");makeActions();hookContextMenu();hookDoubleClickAction();contributeToActionBars();//接收消息try{Threadthread=newThread(newRunnable(){@Overridepublicvoidrun(){BufferedWriterwriter=null;try{StringlogPath=Platform.getInstanceLocation().getURL().getPath()+".metadata/";FilelogFile=newFile(logPath+"widgetone.log");if(!logFile.exists()){logFile.createNewFile();}//FileInputStreaminput=newFileInputStream(logFile);writer=newBufferedWriter(newFileWriter(logFile));DatagramSocketsocket=newDatagramSocket(port);while(true){System.out.println(logPath+"widgetone.log");DatagramPacketpacket=newDatagramPacket(newbyte[1024],1024);socket.receive(packet);Stringdata=newString(packet.getData(),0,packet.getLength());StringsplitStr[]=data.split("");WidgetOneLoglog=newWidgetOneLog(splitStr[0],splitStr[1],splitStr[2]);list.add(log);writer.write(data+"n");writer.flush();System.out.println("data>>>>>>>"+data);}}catch(Exceptione){e.printStackTrace();}finally{try{writer.close();}catch(Exceptione){e.printStackTrace();}}}});thread.start();}catch(Exceptione){e.printStackTrace();}}
解决方案
解决方案二:
thread=newThread(){publicvoidrun(){isClose=false;while(!Thread.interrupted()){if(null!=display&&!display.isDisposed()){display.syncExec(newRunnable(){publicvoidrun(){if(!container.isDisposed()){//你要实现的代码}else{isClose=true;}}});}elsebreak;try{Thread.sleep(Context.citySaleMoniTime);if(isClose){thread.interrupt();}}catch(InterruptedExceptione){e.printStackTrace();}}}};thread.start();
解决方案三:
你这个回答好丰富啊