【发布时间】:2014-09-02 11:38:32
【问题描述】:
我正在尝试将 JavaFX WebView 集成到我的应用程序中。
问题是我想在默认浏览器中打开链接,而不是在 WebView 中。
我google了很多,每个人都在谈论桌面类,所以我试了一下。
这是我现在的相关代码:
webView.getEngine().locationProperty()
.addListener(new ChangeListener<String>() {
@Override
public void changed(
ObservableValue<? extends String> observable,
String oldValue, String newValue) {
Platform.runLater(() -> webView.getEngine().loadContent(content.get()));
new Thread() {
@Override
public void run() {
BrowserOpener.open(newValue);
}
}.start();
}
});
但是,它似乎有效,但有一个问题。 webView.getEngine().locationProperty() .addListener(new ChangeListener() {
@Override
public void changed(
ObservableValue<? extends String> observable,
String oldValue, String newValue) {
Platform.runLater(() -> webView.getEngine()
.loadContent(content.get()));
new Thread() {
@Override
public void run() {
BrowserOpener.open(newValue);
}
}.start();
}
});
浏览器打开器:
public static void open(String uriString) {
openUri(URI.create(uriString));
}
public static void openUri(URI uri) {
if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) {
try {
desktop.browse(uri);
} catch (Exception e) {
e.printStackTrace();
}
}
}
但是,它似乎有效,但有一个问题。如果我运行此应用程序并单击一个链接,默认浏览器会打开该链接,但这就是问题所在。 Windows 文件管理器也正在打开。
如果我将 BrowserOpener.open(newValue) 更改为 BrowserOpener.open("http://google.com") 它工作正常。
你们有什么想法吗?
谢谢。
【问题讨论】:
-
您能否记录
newValue字符串,并发布一些由Windows 文件管理器打开的值的示例? -
我已经调试过了。 newValue 包含与常量完全相同的值。我还插入了一个 newValue.equals(constant) 和它的 true。