java Javafx webview在运行时不显示dashplotly应用程序
我正在尝试将Dash plotly应用程序集成到Java应用程序中
我创建了一个Plotly Dash应用程序,如下所示:
代码中的Dash app组件如下所示:
app = dash.Dash(__name__)
##image_filename = 'tmp.png' # replace with your own image
##encoded_image = base64.b64encode(open(image_filename, 'rb').read())
styles = {
'pre': {
'border': 'thin lightgrey solid',
'overflowX': 'scroll'
}
}
app.layout = html.Div([
html.Div([
html.Div([
dcc.Graph(id='basic-interactions', figure=fig)
], className="seven columns"),
html.Div([
dcc.Markdown("""
**Node Details**
Click node to view details here.
"""),
html.Pre(id='click-data', style={"maxHeight": "500px", "overflow": "scroll"}),
], className="four columns"),
], className="row")
])
@app.callback(
Output('click-data', 'children'),
Input('basic-interactions', 'clickData'))
def display_click_data(clickData):
mydict = ast.literal_eval('{}'.format(clickData))
if mydict!=None:
print_clicked = mydict['points'][0]['text']
for i in full_texts:
if print_clicked == i[0]:
print_clicked = i[1]
if '<br>' in print_clicked:
print_clicked = print_clicked.replace('<br>','\n')
if '<b>' in print_clicked:
print_clicked = print_clicked.replace('<b>','**')
if '</b>' in print_clicked:
print_clicked = print_clicked.replace('</b>','**')
return print_clicked
if __name__ == '__main__':
app.run_server(host='127.0.0.1',port=8050,debug=True)
我还创建了一个Java程序,它接收用户输入,并使用JavaFXWebView面板在Java应用程序中显示Dash应用程序
代码的javafx组件如下所示:
private void setGraph(JPanel pane, String title) throws Exception
{
pane.removeAll();
JFXPanel jfxPanel = new JFXPanel();
pane.setLayout(new BorderLayout());
pane.add(jfxPanel,BorderLayout.CENTER);
Platform.runLater(() -> {
StackPane root = new StackPane();
Scene scene = new Scene(root);
WebView webView = new WebView();
WebEngine webEngine = webView.getEngine();
boolean result=false;
while(result==false) {
try {
ServerSocket serverSocket = new ServerSocket(8050);
result=true;
} catch (IOException e) {
System.out.println("Could not listen on port: " + 8050);
// ...
}
}
if (result ==true) {
webEngine.load("http://127.0.0.1:8050");
root.getChildren().add(webView);
jfxPanel.setScene(scene);
}
});
pane.updateUI();
}
但是,当我第一次运行Java代码时,在http://127.0.0.1:8050创建的Dash应用程序不会显示。(不过,Dash应用程序可以在普通的chrome浏览器上看到)
当我第二次运行Java代码时,Dash应用程序会出现,只是因为在第一次运行中启动的Dash应用程序没有终止。
我已经验证了Java程序的Javafx面板段在构建Dash应用程序的Python代码运行之后运行
我的问题:
我不确定为什么在我第一次运行代码时它不显示Dash应用程序,以及如何解决它
如何在每次执行程序时终止Dash应用程序
我在这上面呆了太久了。。。如有任何建议,将不胜感激
共 (0) 个答案