[英]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.