我有一个Java解决方案,其主线程运行JavaFX桌面应用程序。另外,还会创建另一个线程,通过使用嵌入式Web服务器来处理REST服务。通过使用REST客户端,我可以访问REST服务,但是我无法访问主线程上下文中存在的对象,因为我实际上并不在该线程中。请就如何解决这个问题提出任何建议。从Java中的另一个线程访问/共享对象
public class Main extends Application {
public static MyBrowser myBrowser;
@Override
public void start(final Stage primaryStage) {
myBrowser = new MyBrowser("http://localhost:8080/terminal");
Scene scene1 = null;
Screen s1 = null;
Rectangle2D screenBounds = Screen.getScreens().get(0).getVisualBounds();
s1 = Screen.getScreens().get(0); // i replaced per 0
scene1 = new Scene(myBrowser, screenBounds.getWidth(), screenBounds.getHeight());
primaryStage.setTitle("Terminal 1");
primaryStage.setFullScreen(true);
primaryStage.setX(s1.getVisualBounds().getMinX());
primaryStage.setY(s1.getVisualBounds().getMinY());
primaryStage.setWidth(s1.getVisualBounds().getWidth());
primaryStage.setHeight(s1.getVisualBounds().getHeight());
primaryStage.setScene(scene1);
log.info("before show() method...");
primaryStage.show();
// launch jetty web-server for REST services
log.info("about to create a Thread object for running start() method...");
MyThread jettyThread = new MyThread();
jettyThread.setDaemon(true);
jettyThread.start();
}
public static MyBrowser getMyBrowser() {
return myBrowser;
}
public static void main(String[] args) {
launch(args);
}
public class MyBrowser extends Region {
HBox toolbar;
public WebView webView = new WebView();
WebEngine webEngine = webView.getEngine();
...
}
public class MyThread extends Thread {
public void run() {
try {
EmbeddedWebServerController.start();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
请提供示例代码。此外,如果我正确理解你,_synchronized_关键字是要走的路 – user2358582
嗨user2358582,在这里你会看到代码。请详细说明如何实现synchronized关键字。谢谢 – ekremer
我不知道如果它的完美方式去,但改变方法Main.getMyBrowser到“公共静态同步MyBrowser getMyBrowser()”,并获取对象如:Main.getMyBrowser()在方法mythread.run – user2358582