Progessbar in Statusleiste

schuetzejanett

Erfahrenes Mitglied
Hallo,

möchte gerne das ich während langandauernde prozesse ablaufen unten in der statusleiste des fensters ein progressbar und etwas text erscheint. ist der prozess zuende verschwinden sie wieder. Habe gelesen das das mit dem progressmonitor funktioniert weiß allerdings nicht wie ich in einer action meine statusleiste anspreche, da in meinem bsp das immer übr die view geschiet ich möchte aber in meiner rcp die statusleiste des fensters nutzen und nicht die der view.

Gibts dazu ein bsp? Insbesondere wie ich an die statusleiste komme?
 
Also meine langdauernde aktion ist z.b das aktualisieren einer Tabelle. dafür habe ich eine aktion erstellt. In dieser sollen die neuen daten geholt und angezeigt werden. Während des aufrufs soll in der statusbar ein text und eine progressbar angezeigt werden.
Aber während des aufrufs bleibt die gui gesperrt und auch in der statusliste wird weder die progressbar noch der Text angezeigt. Was habe ich falsch gemacht? :cry:

Hier mein Code

Java:
public class ActionAttachRefresh extends Action implements IWorkbenchAction{
	
	private final IWorkbenchWindow window;
	public final static String ID = "de.fullfillment.client.druckmanager.actions.ActionAttachRefresh";
	
	public ActionAttachRefresh(IWorkbenchWindow window) {		
		this.window = window;
		setId(ID);
		setActionDefinitionId(ID);
		setText("&Aktualisieren");
		setToolTipText("Aktualisieren der Liste.");		
	}

	public void dispose() {
		// TODO Auto-generated method stub
	}
	
	@Override
	public void run() {
		System.out.println("Aktualisieren Beilagen");			
		if (window != null)
		{			 
			try 
			 {	
				final ViewAttach view = (ViewAttach)window.getActivePage().showView(ViewAttach.ID);		
				IActionBars bars = view.getViewSite().getActionBars();
				IStatusLineManager statusLine = bars.getStatusLineManager();
				statusLine.setMessage("Aktualisiert");
				statusLine.update(true);
				IProgressMonitor pm = statusLine.getProgressMonitor();
				pm.beginTask("Aktualisieren", 1);
				pm.worked(1);
				new Thread(new Runnable(){
					@Override
					public void run()
					{
						try{ Thread.sleep(5000);} catch (Exception e) {} 
						DruckManagerClient client = new DruckManagerClient();
						final AttachOverviewResponse attachOverviewResponse = client.attachOverview();
						System.out.println("in thread");
						if (attachOverviewResponse != null)
						{ 			
							Display.getCurrent().asyncExec (new Runnable () {
								public void run () {
									TableViewer viewer = view.getTableViewer();
									viewer.setInput(attachOverviewResponse);				
									viewer.getTable().setBounds(20, 30, 950, 300);				
									viewer.refresh();
									view.setFocus();
									System.out.println("danach");
								}
							});							
						}else				
						{
							MessageDialog.openError(window.getShell(), "Datenfehler", "Fehler bei der Datenabfrage");				
						}						
					}					
				}).run();
				
								pm.done();
			} catch (PartInitException e) 
			{				
				e.printStackTrace();
			}
		}						
	}	
}


Da das später über netzwerkgeht und die verbindung aber noch nicht geht habe ich in dem Thread in sleep eingebaut
 
Zuletzt bearbeitet von einem Moderator:
Zurück