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

如何从Web服务器动态加载FXML?

井兴怀
2023-03-14

我试图用JavaFX替换JSP、HTML和JavaScript,所以我在webserver中保留了FXML文件和业务逻辑。我可以从服务器加载FXML,并通过简单的JavaFX(java)代码在客户端显示它们,但我不能动态加载事件处理程序(控制器)。我想使客户端应用程序成为轻量级应用程序。

有人能建议一个更好的方法来做到这一点吗?

已编辑:我们必须在fxml文件中指定事件处理程序类名。事件处理程序的对象在FXMLLoader加载fxml时实例化。我在tomcat服务器中保留了fxml和事件处理程序类。我创建了一个应用程序,通过使用URLConnection从服务器加载fxml。现在已加载fxml,但我无法处理fxml文件中定义的控件的事件。因为在FXMLLoader加载fxml时,事件处理程序类也由FXMLLoader实例化。在我的客户端应用程序中,事件处理程序类不可用。但是事件处理程序在tomcat服务器中可用。是否有任何方法可以从服务器加载类文件,并在客户端动态实例化类文件(事件处理程序)。

共有2个答案

朱修真
2023-03-14

拥有一个可以从服务器加载它的类加载器

您也可以查看我的WebFX分支(https://github.com/pjBooms/webfx)这允许使用Java重启技术从FXML引用位于远程服务器上的Java类(https://github.com/pjBooms/Java-ReStart).

董元徽
2023-03-14

使用脚本语言(如JavaScript)是从服务器加载带有一些相关控制逻辑的fxml页面的一种方法,这样客户端计算机上就不需要编译了——这与已建立的html JavaScript模型非常相似。

您可以尝试WebFX作为这种方法的一个例子。

节拍器。fxml

<?xml version="1.0" encoding="UTF-8"?>
<?language javascript?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.shape.*?>

<AnchorPane id="AnchorPane" prefHeight="370.0" prefWidth="320.0" xmlns:fx="http://javafx.com/fxml">
  <children>
    <HBox id="HBox" alignment="CENTER" layoutX="36.0" layoutY="328.0" spacing="5.0">
      <children>
        <Button fx:id="startButton" mnemonicParsing="false" onAction="handleStartButtonAction(event);" text="%start" />
        <Button fx:id="pauseButton" mnemonicParsing="false" onAction="handlePauseButtonAction(event);" text="%pause" />
        <Button fx:id="resumeButton" mnemonicParsing="false" onAction="handleResumeButtonAction(event);" text="%resume" />
        <Button fx:id="stopButton" mnemonicParsing="false" onAction="handleStopButtonAction(event);" text="%stop" />
      </children>
    </HBox>
    <Circle fx:id="circle" fill="RED" layoutX="64.0" layoutY="58.0" radius="7.0" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" />
  </children>

  <fx:script source="metronome.js" />
</AnchorPane>

节拍器。js

var webfx = {title: "Metronome WebFX Sample"};

var java = Packages.java;
var javafx = Packages.javafx;

var URL = java.net.URL;
var ResourceBundle = java.util.ResourceBundle;

var Animation = javafx.animation.Animation;
var Interpolator = javafx.animation.Interpolator;
var Timeline = javafx.animation.Timeline;
var TranslateTransitionBuilder = javafx.animation.TranslateTransitionBuilder;
var Duration = javafx.util.Duration;

var anim = TranslateTransitionBuilder.create()
        .duration(new Duration(1000.0))
        .node(circle)
        .fromX(0)
        .toX(200)
        .interpolator(Interpolator.LINEAR)
        .autoReverse(true)
        .cycleCount(Timeline.INDEFINITE)
        .build();

function handleStartButtonAction()  { anim.playFromStart(); }    
function handlePauseButtonAction()  { anim.pause(); }    
function handleResumeButtonAction() { anim.play();  }
function handleStopButtonAction()   { anim.stop();  }    
startButton.disableProperty().bind(anim.statusProperty().isNotEqualTo(Animation.Status.STOPPED));
pauseButton.disableProperty().bind(anim.statusProperty().isNotEqualTo(Animation.Status.RUNNING));
resumeButton.disableProperty().bind(anim.statusProperty().isNotEqualTo(Animation.Status.PAUSED));
stopButton.disableProperty().bind(anim.statusProperty().isEqualTo(Animation.Status.STOPPED));

如果你不想使用像JavaScript这样的脚本语言,而是想为控制器使用像Java这样的静态语言,你需要找到在客户端上获得编译类文件的方法。例如,通过在服务器上编译并拥有一个可以从服务器加载它的类加载器,或者通过将java编译器与客户端应用一起发送并在那里编译源代码。

 类似资料:
  • 编辑 当我在模拟器中运行这段代码时,代码仍然不能工作-文件没有下载。

  • 语境 这是一个使用Java RMI的应用程序,具有: 主机A上的客户端和主机B上的服务器 主机A上的HTTP服务器,它保存客户端和服务器使用的所有类的副本。 RMI注册表是从服务器代码创建的,它共享服务器JVM和CLASSPATH。 对于服务器和客户端应用程序: 属性(在代码中)设置为HTTP服务器URL 安全管理器具有适当的策略 设置为LAN地址 方法调用: 服务器方法是用类型为(抽象类)的参数

  • 本文向大家介绍如何用PHP来实现一个动态Web服务器,包括了如何用PHP来实现一个动态Web服务器的使用技巧和注意事项,需要的朋友参考一下 要是现实一个 web 服务器,那么就需要大概了解 web 服务器的运行原理。先从静态的文本服务器开始,以访问 web 服务器的1.html为例 1.客户端通过发送一个 http 请求到服务器,如果服务器监听的端口号是9002,那么在本机自身测试访问的地址就是h

  • 有人知道netty服务器处理程序取消从web服务器接收数据的最佳方法吗?我有一个服务器处理程序,它将HttpRequests代理到web服务器。但是,当请求客户端取消请求时,我希望在不关闭服务器处理程序和web服务器之间的连接的情况下停止从web服务器接收服务器通道上的数据。 有谁知道我怎么才能做到这一点。你的答复将不胜感激。 非常感谢。

  • 我知道如何加载CSS。 怎么卸载?

  • 我正在尝试建立 PHP 连接,但不断收到此错误。我希望有人能帮忙。 我的代码给出了以下错误: 我的代码是: 而 busca.php 的文件是: