gpt4 book ai didi

java - 无法在 JavaFX JavaScript 中使用 URLClassLoader 加载自定义类

转载 作者:行者123 更新时间:2023-12-03 02:06:38 24 4
gpt4 key购买 nike

我正在尝试在 FXML JS 中加载我的自定义类。

首先,我已将 URLClassLoader 与我的 JAR 添加到 FXMLLoader 实例中:

FXMLLoader loader = new FXMLLoader();
loader.setController(TabController.this);

URLClassLoader fxmlClassLoader = (URLClassLoader) loader.getClassLoader();
loader.setClassLoader(URLClassLoader.newInstance((URL[]) ArrayUtils.addAll(new URL[]{ new File("/home/sk_/projects/mjolnirr/.hive/static/calculator/origJar.jar").toURI().toURL() }, fxmlClassLoader.getURLs())));

然后在 FXML JavaScript 中:

importClass(com.mjolnirr.sample.SomeTestClass);

失败并出现错误:

sun.org.mozilla.javascript.internal.EvaluatorException: Function importClass must be called with a class; had "[JavaPackage com.mjolnirr.sample.SomeTestClass]" instead. (<Unknown source>#2) in <Unknown source> at line number 2

有人遇到过这种情况吗?

最佳答案

好的,我找到了一种破解解决方案 there 。简而言之 - 我刚刚动态地将 URL 添加到系统类加载器,如下所示:

public static void addURLToSystemClassLoader(URL url) throws IntrospectionException {
URLClassLoader systemClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Class<URLClassLoader> classLoaderClass = URLClassLoader.class;

try {
Method method = classLoaderClass.getDeclaredMethod("addURL", new Class[]{URL.class});
method.setAccessible(true);
method.invoke(systemClassLoader, new Object[]{url});
} catch (Throwable t) {
t.printStackTrace();
throw new IntrospectionException("Error when adding url to system ClassLoader ");
}
}

然后在我的渲染方法中

FXMLLoader loader = new FXMLLoader();
loader.setController(TabController.this);

try {
addURLToSystemClassLoader(new URL("hive://" + pageURL.getHost() + ":" + pageURL.getPort() + "/" + pageURL.getApplicationName() + "/origJar.jar"));
} catch (Exception e) {
e.printStackTrace();
}

但这看起来是一个不好的做法。

我认为最初的问题是 - JavaFX 脚本引擎具有不同的类加载器,FXML 加载器不会将其自身传递给脚本引擎。有人知道如何设置脚本引擎的类加载器吗?

关于java - 无法在 JavaFX JavaScript 中使用 URLClassLoader 加载自定义类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20132286/

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