[Lösung]Hohe Systemauslastung bei JFileChooser auf WindowsXP

Status
Nicht offen für weitere Antworten.

Verjigorm

Top Contributor
Hallo,

ich dachte ich schreibe mal etwas ausführlicher hierrein, vielleicht interessiert es ja irgendwen.

Das generelle Problem war:
Java.exe zeigt beim Start 100% Systemauslastung, das ausgeführte Javaprogramm brauchte 10-15sek zum Starten.
(nachzulesen: http://www.java-forum.org/de/viewtopic.php?t=73102&highlight= )

Nun bin ich heute endlich dahintergekommen woran es liegt:
An einem Bug der Auftritt zwischen WindowsXP und dem JFileChooser
und zwar nur dann, wenn sich auf dem WindowsXP-Desktop zip's oder rar's mit vielen Elementen befinden.

Der Bug wird hier beschrieben:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6372808

Kurze Rede langer Sinn:

Lösung1: Zip's/Rar's vom Desktop entfernen (kann man bei nem Kunden oft schlecht kontrollieren)

Lösung 2: Im JFileChooser folgenden Befehl in die überschriebene updateUI einfügen:

@Override
public void updateUI()
{
putClientProperty("FileChooser.useShellFolder", Boolean.FALSE); //<---- VOR super.updateUI() einfügen!
super.updateUI();
}

Ich hatte 2-3 Zips (je 1-3mb) auf dem Desktop liegen -> Startdauer 8-15 Sekunden
Zip's entfernt -> Startdauer ~1,5 sek!
genauso mit dem überschreiben der updateUI() ....

sehr strange sage ich euch!

mfg Verjigorm
 
was meinst du mit 'im JFileChooser'?
und wo soll man den Code hinzufügen?

tritt das nur bei Programmen mit eigener JFileChooser-Klasse auf?
 
Das Problem tritt immer auf, nicht nur bei eigenen Klassen, die JFileChooser erweitern.
Beispiel mit einigen zip's aufm Desktop:

Haben das grade mal auf mehreren Rechnern getestet.

edit: Achso, das Problem betrifft nur Java 6 (siehe bugreport oben)

Code:
import javax.swing.JFileChooser;

public class BugTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		new JFileChooser();
		System.out.println("fertig nach " + (System.currentTimeMillis() - start));
	}

}

Dauer: 2,8 - 8,6 Sekunden

Code:
import javax.swing.JFileChooser;

public class BugTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		long start = System.currentTimeMillis();
		new JFileChooser() 
		{
			@Override
			public void updateUI() 
			{
				putClientProperty("FileChooser.useShellFolder", Boolean.FALSE);
				super.updateUI();
			}
		};
		
//		new JFileChooser();
		System.out.println("fertig nach " + (System.currentTimeMillis() - start));
	}

}

Dauer: 0,32 - 0,65 Sekunden
 
Hättest du das Forum aufmerksam gelesen... Vor ein Paar Tagen habe ich jemandem diese Frage beantwortet :wink:
 
ich frage mich ja vor allem, obs auch bei

Code:
public class BugTest { 

   /** 
    * @param args 
    */ 
   public static void main(String[] args) 
   { 
      System.out.println("fertig nach " + (System.currentTimeMillis() - start)); 
   } 

}
auftritt
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben