Java: Checking while run time if class exists [dup

2019-02-26 21:19发布

问题:

This question already has an answer here:

  • Check if class exists in Java classpath without running its static initializer? 1 answer

I am working on a software which depends on an 3rd party library. Due to license agreements this library cannot be shipped along with the software and the user has to have the library already locally when starting the program.

Is there any way to check if this particular library exist in the class path and can be loaded? If not I would like to offer a dialog to allow the user pointing to the location and add this location to the class path dynamically.

Thanks for your help!

回答1:

Try this:

try {
    Class<?> clazz = Class.forName("com.acme.SecretClass");
} catch (ClassNotFoundException e) {
    // Show dialog
}


回答2:

The fastest way in terms of computing time I know is:

public class ClazzUtil {

    public static boolean isClassnameAvailable(String clazzName) {
        try {
            Class.forName(clazzName, false, ClazzUtil.class.getClassLoader());
        } catch (LinkageError | ClassNotFoundException e) {
            return false;
        }
        return true;
    }

}


回答3:

If a class is not present at runtime,it will throw ClassNotFoundException. You can check for this in the following way.

try {
    Class cls = Class.forName("yourClassName");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}


回答4:

Just solved the problem in my code, supper useful without raising an exception.

@SuppressWarnings("finally")
private boolean existClass(String className){
    Class<?> classname= null;
    try {
        classname = Class.forName(className);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } finally{
        if(classname == null) 
            return false;
        else 
            return true;
    }
}