[英]Asynchronous JSON String loading JavaScript
我正在使用d3强制有向图来显示我从API获得的一些数据。 在显示它之前,它通过Java类运行,该类确实将其写入正确的json格式。
由于该程序在JavaFX WebView中运行,所以我有一个桥类,该桥类确实具有可从JavaScript调用的getter方法。
在我的主类中,我创建一个WebView并为其分配桥。 我初始化我的JSON转换器并将桥传递给它。
@Override
public void start(Stage stage) {
try {
new JsonTranslator(individual, depth, bridge);
Scene scene = createScene();
[...]
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
private Scene createScene() {
[...]
try {
JSObject jsobj = (JSObject) webEngine.executeScript("window");
jsobj.setMember("java", bridge);
} catch (Exception e) {
e.printStackTrace();
}
[...]
}
在我的JSONTranslator类中,我编写json并将其传递给桥
private void writeFile() {
try {
bridge.setJSONObject(obj.toJSONString());
FileWriter file = new FileWriter(
"C://path/to/some/file.json"
file.write(obj.toJSONString());
file.flush();
file.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Object:" + obj);
}
我也将其写入文件。 数据按预期方式打印。 现在,在我的桥中,整个getter / setter中的数据都可用。 在JSToFXBridge.java中:
public String getJSONObject(){
System.out.println("get request: " + json);
return json;
}
public void setJSONObject(String string){
this.json = string;
}
现在,我从JavaScript中调用它
[...]
var draw = function(json, callback) {
[...]
callback.call(data);
};
var data = java.getJSONObject();
draw(data);
但是,它确实会打印get request: -my json data-
在控制台上,json字符串完全可以。 如果我在控制台中将其复制并粘贴为类似于var data = -my json data-
的代码,则它将起作用。 仅直接从该方法分配它是行不通的。 我不知道为什么,因为我尝试异步加载它。 基于本教程 。 在对字符串进行修饰时是否出错? 还是这样做是错误的方式?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.