当前位置: 首页 > 知识库问答 >
问题:

检测到Glass-如何运行远离GUI的代码

石正卿
2023-03-14

我正在创建一个新的javafx应用程序--这是我第一次使用javafx。我正在使用FXML创建GUI,并在此基础上创建一个阶段,如下所示:

public void start(Stage stage) throws Exception {

    Parent root = FXMLLoader.load(getClass().getResource("Main.fxml"));        
    Scene scene = new Scene(root);        
    stage.setScene(scene);
    stage.show();
}

我的FXML有一个按钮指向我的MainController,在它的click上调用handleButton方法:

公共类MainController实现Initializable{

@FXML
private void handleButtonAction(ActionEvent event) {
    System.out.println("You clicked me!");         
}

上面的代码工作良好,控制台打印出“你按预期点击了我”。但我想要的是一个web请求和运行的其他代码:

公共类MainController实现Initializable{

@FXML
private void handleButtonAction(ActionEvent event) {
    System.out.println("You clicked me!"); 
    HttpClient client = new HttpClient();        
}

当我尝试在按钮处理程序中创建HTTP客户端对象时,我得到以下错误:

跑:你点击了我!Glass在-[GlassViewDelegate SendJavaMouseEvent:]:src/com/sun/mat/ui/GlassViewDelegate.m:541线程“JavaFX Application thread”Java.lang.runtimeException:Java.lang.reflect.invocationtargetException:Java.lang.runtimeException:Java.lang.runtimeException:Java.lang.runtimeException:Java.lang.fxmlloader$ControllerMethodEventHandler.handle(在com.sun.javafx.event.eventdispatchchainimpl.dispatchevent(eventdispatchchainimpl.java:92)在com.sun.javafx.event.eventutil.fireeventmpl(eventutil.java:53)在com.sun.javax.event.eventutil.fireevent(eventutil.java:28)在com.sun.javax.event.event.fireevent(event.java:171)在javafx.scene.node.fireevent(event.java:171)在Java:38)在com.sun.javafx.event.basiceventdispatcher.dispatchevent(basiceventdispatcher.Java:37)在com.sun.javafx.event.event.eventdispatchchainimpl.dispatchevent(eventdispatchchainimpl.Java:92)在com.sun.javafx.event.basiceventdispatchevent(eventdispatchchainimpl.Java:35)在com.sun.javafx.event.dispatchevent(eventdispatchchainimpl.Java:35e$ScenePeerListener.MouseEvent(Scene.java:2265)在com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.Run(GlassViewEventHandler.java:250)在com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.Run(GlassViewEventHandler.java:173)在java.security.AccessController.Doprivileged(本机方法

所以我的问题是:

a)为什么会发生这种情况?为什么创建HTTPClient时会抛出这个错误,而像printlns和变量赋值这样的简单操作工作得很好。

b)在javafx中处理按钮点击的正确方法是什么--在swing中,我将使用SwingWorker来完成核心应用程序工作,而不是GUI。

我期待任何帮助!

共有1个答案

艾令秋
2023-03-14

您需要移动到一个异步HTTP客户机,它可以将接收到的信息发送回javaFX线程,UI线程不喜欢被阻止,我建议您研究一下javaFX的任务运行程序,或者如果您想进一步深入一些CompletableFuture等等。

 类似资料:
  • 问题内容: 如何检测代码是否在Eclipse IDE中运行 问题答案: 我不知道获取此类信息的通用方法。 一个建议: 当您在Tomcat中启动Java程序(或Web服务器)时,只需添加一个参数即可表明该程序是由Eclipse启动的。 您可以通过打开“打开运行对话框”(“运行”菜单),然后选择您的应用程序类型并在“参数”选项卡中添加a来实现。 在您的Java代码中,您可以检查属性的值: 这样,如果程

  • 因为我需要分析应用程序在不允许GUI的远程机器上运行。我使用JProfiler8和远程主机中的run/bin/jpenable代理启动了远程会话评测。成功分析后,我需要停止远程jpenable jprofiler8代理。我该怎么做? 为了确保以前启动的代理是否仍处于运行状态,我再次运行了 /bin/jpenable代理。现在我没有看到以前绑定的JVM。所以我假设它已经和以前的代理绑定了。

  • 问题内容: 我开始使用GDK开发Google Glass应用程序。 我将Eclipse与Android SDK Manager结合使用来安装GDK。 在那之后,我输入以下提到的步骤的谷歌眼镜项目在这里: 单击 文件 >新建项目> Android示例项目 选择 Glass Development Kit 作为构建目标,然后单击Next。 选择 计时器 示例,然后单击 完成 。 在Eclipse Pa

  • 问题内容: 我的项目结构 尽管stuff_test是从stuff.go执行代码的,但它表明 我使用了 如果我将* _test.go移至程序的stuff-folder,它将运行良好。 还是我的项目结构方法设计得不好/不符合要求? 问题答案: 不直接支持跨包测试覆盖率,但是有几个人构建了包装程序以合并各个覆盖率配置文件。 有关此问题的悠久历史,请参见问题#6909。并查看gotestcover以获取进

  • 问题内容: 如何在JavaScript中检测Internet连接是否离线? 问题答案: 您可以通过发出 失败的XHR请求 来确定连接丢失。 标准方法是 重试 几次 请求 。如果没有通过,请 警告用户 检查连接,然后 正常失败 。 旁注: 将整个应用程序置于“脱机”状态可能会导致很多容易出错的状态处理工作。无线连接可能会来去去等等。因此,最好的选择是妥善地失败,保留数据,并警告用户..允许他们最终解