gpt4 book ai didi

java - 这是类加载器的错误使用还是不好的做法?

转载 作者:行者123 更新时间:2023-12-01 12:47:35 24 4
gpt4 key购买 nike

我的程序设计为从可运行的 jar 文件启动,根据需要设置所有内容,然后加载另一个 jar 文件中的类以启动程序。这允许 self 更新、重新启动等。好吧,我的类加载代码对我来说似乎有点时髦。下面是我用来加载程序的代码。这是不正确的使用还是不好的做法?

    try {
Preferences.userRoot().put("clientPath", Run.class.getProtectionDomain().getCodeSource().getLocation().toURI().toString()); //Original client location; helps with restarts
} catch (URISyntaxException e1) {
e1.printStackTrace();
}

try {
Preferences.userRoot().flush();
} catch (BackingStoreException e1) {
e1.printStackTrace();
}


File file = new File(path); // path of the jar we will be launching to initiate the program outside of the Run class
URL url = null;
try {
url = file.toURI().toURL(); // converts the file path to a url
} catch (MalformedURLException e) {
e.printStackTrace();
}
URL[] urls = new URL[] { url };
ClassLoader cl = new URLClassLoader(urls);

Class cls = null;
try {
cls = cl.loadClass("com.hexbit.EditorJ.Load"); // the class we are loading to initiate the program
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

try {
cls.newInstance(); // starts the class that has been loaded and the program is on its way
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}

最佳答案

您遇到的最大问题是,当您收到异常时,您假装记录该异常可以继续,就好像什么也没发生一样。

如果您聚合 try/catch block ,您的代码将更短且更易于阅读,并且不会认为异常并不重要。

试试这个例子

public static Object load(String path, String className) {
try {
URL url = new File(path).toURI().toURL();
ClassLoader cl = new URLClassLoader(new URL[] { url });
return cl.loadClass(className).newInstance();
} catch (Exception e) {
throw new IllegalStateException("Unable to load "+className+" " + e);
}
}

关于java - 这是类加载器的错误使用还是不好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24537917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com