昨天发布了 WeexIntellijPlugin 1.1版本,兼容了 Java7, 兼容的方法是如果没有 JavaFx 的 jar 包就不实时的显示渲染结果, 用户点击二维码查看渲染结果.

然后我就在想,有没有什么办法来动态的加载 JavaFx 的依赖呢.

终于找到了一种方法, 间接地涨了一种很牛逼的姿势..

下载 JavaFx 的依赖到随便一个地方,然后我们可以这样来动态的依赖它.

例如如下代码:

/**
* Created by darin on 18/03/2017.
*/

public class Browser {

public WebView browser;

private WebEngine engine;

private final static String classPath = "/Users/darin/Downloads/javafx-sdk-overlay";

public Browser() {
loadJavaFx();
}

private void loadJavaFx() {

File javaFxJars = new File(classPath);

File[] files = javaFxJars.listFiles();

ArrayList<URL> urls = new ArrayList<>();

for (File file : files) {

if (file.isDirectory()) {
String filePath = file.getAbsolutePath();
try {
URL url = new URL(filePath);
urls.add(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}

URL[] classPathUrl = new URL[urls.size()];
for (int i = 0; i < urls.size(); i++) {
classPathUrl[i] = urls.get(i);
}

ClassLoader loader = new URLClassLoader(classPathUrl);

try {
Class<?> cls = loader.loadClass("javafx.scene.web.WebView");

if (cls != null) {
Object obj = cls.newInstance();

if (obj != null && obj instanceof WebView) {
browser = (WebView) obj;
engine = browser.getEngine();
engine.load("https://www.taobao.com/");
}

}

} catch (Exception e) {
e.printStackTrace();
}
}

}

将 JavaFx 的 jar包动态的下载到 /Users/darin/Downloads/javafx-sdk-overlay目录里, 然后用URLClassLoader, 指定这个 path就可以通过反射的方式拿到 Webview 的实例了. 然后, 就可以在Java7的环境下愉快的使用 JavaFx 了

效果如下: pic