Java-апплет не показывает форму FXML - PullRequest
0 голосов
/ 24 июня 2018

У меня есть Java-апплет:

public abstract class FXApplet extends JApplet {

    /**
     * Initializes a Swing thread
     */
    @Override
    public void init() {
        SwingUtilities.invokeLater(this::initSwing);
    }

    /**
     * Initializes a JavaFX thread
     */
    private void initSwing() {
        JFXPanel panel = new JFXPanel();
        add(panel);

        Platform.runLater(() -> initFX(panel));
    }

    /**
     * Here u can use JavaFX components
     * @param panel Root panel
     */
    abstract protected void initFX(JFXPanel panel);
}

public class FSSApplet extends FXApplet {

    @Override
    protected void initFX(JFXPanel panel) {

        try {
            ClassLoader classLoader = getClass().getClassLoader();
            URL res = classLoader.getResource("views/fss.fxml");
            Parent root = FXMLLoader.load(res);
            Scene scene = new Scene(root);
            panel.setScene(scene);
        } catch (IOException e) {
            e.printStackTrace();
            Alert alert = new Alert(Alert.AlertType.ERROR);
            alert.setTitle("Ошибка");
            alert.setHeaderText("Критическая ошибка");
            alert.setContentText("Неудалось загрузить форму");

            alert.showAndWait();
        }
    }
}

Но когда я запускаю свой апплет в браузере, он показывает только серое поле. Но если я использую компоненты Swing, браузер показывает все отлично.
Моя форма FXML:

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

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>

<GridPane maxHeight="-Infinity" maxWidth="-Infinity"
          minHeight="-Infinity" minWidth="-Infinity"
          prefHeight="400.0" prefWidth="600.0"
          fx:controller="com.contedevel.fss.controller.FSSController"
          xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1">
  <columnConstraints>
    <ColumnConstraints hgrow="NEVER" minWidth="200.0" prefWidth="200.0" />
    <ColumnConstraints hgrow="ALWAYS" minWidth="10.0" prefWidth="100.0" />
  </columnConstraints>
  <rowConstraints>
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="ALWAYS" />
  </rowConstraints>
   <children>
      <VBox prefHeight="200.0" prefWidth="100.0">
         <children>
            <Label text="Label" fx:id="txtResult"/>
            <Button mnemonicParsing="false" onAction="#handleFindAction" text="Find" />
         </children>
      </VBox>
   </children>
</GridPane>

HTML:

<div class="page">
    <applet code="com.contedevel.fss.applet.FSSApplet.class" width="100%" height="100%">Загрузка аплета</applet>
</div>

Короче говоря, JavaFX не работает и не показывает никаких ошибок. Где может быть проблема?

P.S. Я использую Java 8 и старый браузер Firefox. Поддерживает апплеты.

...