# JProgressBar



## Titanpharao (16. Okt 2007)

Hi,

habe zwar denn großen Forenbeitrag verfolgt zu ProgressBar, nur bin ich nicht weiter schlau geworden. 
Ich habe eine Methode, die eine Datei ausließt und anschließend in ein Format Packt. Das kann von parr Sekunden bis hin zu Minuten dauern. Ich kann nicht einschätzen wie lange dieser Vorgang dauert.

Ist es möglich für sowas ein "Ladenbildschirm" zu machen? So das er in etwa selber weis wie weit er ist? Oder wie mache ich son "Knight Rider" style? Also der User soll nichts machen können wären er Arbeitet.

Mfg Oliver


----------



## SlaterB (16. Okt 2007)

> So das er in etwa selber weis wie weit er ist?

super Magie 

>  Oder wie mache ich son "Knight Rider" style?

Thread/ Timer laufen lassen, alle x Sekunden Zustand ändern (z.B. 1, 2, 3, 4, 5, 4, 3, 2, ..),
repaint() und ne paint-Komponente, die entsprechend malt


----------



## Marco13 (16. Okt 2007)

Neee, das KnightRider-Dingens kriegt man mit einer JProgressBar, wenn man sie auf setIndeterminate(true) setzt... Und das ganze in einem modalen Dialog, dann kann der User nichts machen.


----------



## tuxedo (16. Okt 2007)

Wenn du aus der Datei liest, dann hast du auch zugriff auf deren Dateigröße und darauf, wieviel du schon gelesen hast. Ergo kannst du mit der ProgressBar exakt anzeigen lassen wie weit der Vorgang schon ist. 

Wie liest du denn aus der File?

- Alex


----------



## Titanpharao (17. Okt 2007)

Sry das mich so lange nicht gemeldet habe ;-), aber gestern keine Zeit mehr.


```
SAXParser saxParser = factory.newSAXParser();
      saxParser.parse(new File(filename), handler);
```

XML-Datei...das problem ist nur das ich diese speziell auslese, was mehrfache Schleifendurchläufe benötigt, und das dauert dann so lange, nicht das eigentliche auslesen der Datei.

Hat einer mal zufällig kleines Beispiel mit so einem Modul?  :roll:


----------



## Titanpharao (18. Okt 2007)

Hier nochmal...bissel Code.


```
conv.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent evt) {
			if(checktextfield()){
				setPanel(loadTreeProgress());
				loadTree();
			}
		}
	});
	
	panel.add(conv);
	return panel;	
	}
	
	public JPanel loadTreeProgress(){
		panel=new JPanel(new BorderLayout());
		panel.setBackground(Color.WHITE);
		JProgressBar jpb=new JProgressBar();
		jpb.setIndeterminate(true);
		panel.add(jpb);				
		return panel;
	}
	
	private void loadTree(){
		VSXwV parser = new VSXwV();
		long startTime = System.currentTimeMillis();
		parser.parse(xmlff.getText());
		long estimatedTime = System.currentTimeMillis() - startTime;
		System.out.println("Treeerstellen:"+ estimatedTime/1000.0+" Sekunden.");
		xsdschema=parser.handler.xsdschema;
		setPanel(tree());
	}
```

Ist einfach mal so ausm Programm herraus. Kann es sein, das der Parser die Progressbar "überschreibt". Es wird keine angezeigt, doch wenn ich parser.parse(...) rausnehme dann funktionierts.

Dachte mir das so zeichne ProgressBar, führe parsen durch, wenn parsen fertig zeige Tree.

Oder muss ich das Parsen in Thread stecken / Progressbar?


----------



## Marco13 (18. Okt 2007)

Der Event Dispatch Thread wird durch das Laden des Baumes blockiert. Schau dir mal hier

Wie es geht: http://java.sun.com/docs/books/tutorial/uiswing/components/progress.html
Warum es so geht wie es geht: http://java.sun.com/docs/books/tutorial/uiswing/concurrency/index.html

Noch ein Link mit einem Flash-Tutorial, den alex0801 mal gepostet hatte - ist echt ganz nett gemacht: http://www.javalobby.org/eps/galbraith-swing-2/


----------



## Titanpharao (18. Okt 2007)

Hm...habe mich jetz fast 30min von dem zulaufen lassen ;-), war aber schon echt interresant.

Habe jetzt sowas


```
private void loadTree(){
		SwingWorker swingWorker=new SwingWorker(){
			public Object construct(){
				VSXwV parser = new VSXwV();
				parser.parse(xmlff.getText());
				xsdschema=parser.handler.xsdschema;
			}
			public void finished(){
				setPanel(tree());		
			}
		};
		swingWorker.start();
	}
```

Hoffe mal das ist soweit richtig. Habe das so aus seine Demo mal für mich übersetzt.

Leider spinnt der noch ander new und start Zeile herrum 
Will <> haben? Aber hatte der doch auch nicht.


----------



## Marco13 (18. Okt 2007)

Das Tutorial war eher um die Rechtfertigung dafür zu vermitteln. Wirklich holfreich dürfte der zweite Link sein. Da findet man recht schnell sowas wie
http://java.sun.com/docs/books/tuto...moProject/src/components/ProgressBarDemo.java
und das solltest du dann doch für deine Zwecke anpassen können....


----------



## Titanpharao (19. Okt 2007)

Nönö danke funktioiert super ;-I


----------

