我有个问题。我在同一个 javafx 包中有两个类。一个带有 javascript 在 head 部分的单个 html 文件,一个 java 类(扩展应用程序)。现在的问题是,当我在 javafx webview 中显示页面后尝试单击按钮时,webView 中没有任何更新。下面是这两个文件的代码。请我需要知道为什么它不起作用。我从8小时以来一直在调试这个问题,没有成功。提前致谢。java类
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import javafx.application.Application;
import javafx.concurrent.Worker;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import netscape.javascript.JSObject;
public class JavaFXApplication25 extends Application {
// inner class
public class Adder
{
public double add(double n, double m)
{
return n + m;
}
}
@Override
public void start(Stage primaryStage) throws URISyntaxException, MalformedURLException {
WebView w = new WebView();
WebEngine e = w.getEngine();
e.setJavaScriptEnabled(true);
e.load(this.getClass().getResource("tester.html").toURI().toURL().toExternalForm());
Scene scene = new Scene(new VBox(w));
primaryStage.setScene(scene);
primaryStage.show();
// make javascript aware of java object
e.getLoadWorker().stateProperty().addListener(
(p, o, n) ->{
if(n == Worker.State.SUCCEEDED){
JSObject b = (JSObject) e.executeScript("window");
b.setMember("adder", new Adder());
}
}
);
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
html文件
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script type="text/javascript">
function addNum(){
var n1 = Number(document.getElementById('num1').value);
var n2 = Number(document.getElementById('num2').value);
var n3 = adder.add(n1, n2);
document.getElementById('r').innerHTML = n3;
}
</script>
</head>
<body>
<input type="text" id="num1" />
<input type="text" id="num2" />
<p> <span id="r"> </span></p>
<button onclick="addNum()" >Add</button>
</body>
关键是程序运行并显示页面,但是在按下按钮时,页面上没有任何更新 我什至尝试在加载 html 页面之前进行调用,但是没有成功。请有人帮助检查代码中的错误。再次感谢。
现在下面是运行后的输出。即使多次单击“添加”按钮,它也不会显示任何内容!标准控制台上没有错误消息,什么都没有! 输出