Question

I installed custom ClassLoader to track loaded classes at runtime, to catch some bad responsive moments, and I saw that some GUI classes are loaded every time when JFrame/JDialog is created:

loading: com.sun.java.swing.plaf.windows.WindowsPopupMenuSeparatorUI
loading: com.sun.java.swing.plaf.windows.WindowsTextFieldUI
loading: com.sun.java.swing.plaf.windows.WindowsTextAreaUI
loading: com.sun.java.swing.plaf.windows.WindowsComboBoxUI
loading: com.sun.java.swing.plaf.windows.WindowsPasswordFieldUI

Why that classes are loaded by ClassLoader with every single dialog instantiation, not only once?

another examples:

com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
com.sun.org.apache.xerces.internal.impl.dv.dtd.DTDDVFactoryImpl

my simple ClassLoader:

public class MyClassLoader extends ClassLoader {

    public MyClassLoader ( ClassLoader parent ) {
        super( parent );
    }

    @Override
    public Class<?> loadClass( String name ) throws ClassNotFoundException {
        System.out.println( "loading: " + name );
        return super.loadClass( name );
    }
}

JVM parameter: -Djava.system.class.loader=mupackage.MyClassLoader

Was it helpful?

Solution

Loading the UI class it part of Swing's look&feel initialization process, see UIDefaults.getUI(...) for more info

Unless it is called millions of times, loadClass(...) is not very likely to be your problem here: if the class has already been loaded it will return very fast. Try using a profiler to pinpoint the cause of the slowdowns

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top