Java FXML从绝对路径加载(动态) - java

我想从绝对路径或jar系统外部的路径加载fxml文件。

背景:
这将是一个简单的插件系统,该插件系统在所有fxml文件(后来的jar文件)的plugin文件夹中,并将其自动包含在TabPane中。

String fxmlpath = "C:\\plugin\\pluginfxml.fxml";
try {
    Parent root = FXMLLoader.load(getClass().getResource(fxmlpath));
    //Load root in Tabpane and so on ...
}

参考方案

它应该很简单:

Parent root = FXMLLoader.load(Paths.get(fxmlpath).toUri().toURL());

FXMLLoader接受URL作为其参数,因此我们仅使用NIO Paths类获取Path,然后将其转换为URL。如果程序没有对该文件位置的读访问权,则会发生唯一的问题。

我用JavaFX教程中的示例代码充实了该示例:

测试应用:

package javafx;

import java.net.URL;
import java.nio.file.Paths;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class FXMLTest extends Application {

    public static void main(String[] args) {
        Application.launch(FXMLTest.class, args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        URL fxmlURL = Paths.get("C:\\test\\fxml_example.fxml").toUri().toURL();
        Parent root = FXMLLoader.load(fxmlURL);

        stage.setTitle("FXML Welcome");
        Scene myScene = new Scene(root, 300, 275);
        stage.setScene(myScene);
        stage.show();
    }
}

控制器示例:

package javafx;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.text.Text;

public class FXMLExampleController {
    @FXML private Text actiontarget;

    @FXML protected void handleSubmitButtonAction(ActionEvent event) {
        actiontarget.setText("Sign in button pressed");
    }
}

示例FXML:

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

<?import java.net.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>


<GridPane fx:controller="javafx.FXMLExampleController" 
    xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10"
    styleClass="root">
    <padding><Insets top="25" right="25" bottom="25" left="25"/></padding>

    <Text id="welcome-text" text="Welcome" 
         GridPane.columnIndex="0" GridPane.rowIndex="0"
        GridPane.columnSpan="2"/>

    <Label text="User Name:"
        GridPane.columnIndex="0" GridPane.rowIndex="1"/>

    <TextField 
        GridPane.columnIndex="1" GridPane.rowIndex="1"/>

    <Label text="Password:"
        GridPane.columnIndex="0" GridPane.rowIndex="2"/>

    <PasswordField fx:id="passwordField" 
        GridPane.columnIndex="1" GridPane.rowIndex="2"/>

    <HBox spacing="10" alignment="bottom_right" 
        GridPane.columnIndex="1" GridPane.rowIndex="4">
        <Button text="Sign In"     
        onAction="#handleSubmitButtonAction"/>
    </HBox>

    <Text fx:id="actiontarget"
        GridPane.columnIndex="1" GridPane.rowIndex="6"/>

    <stylesheets>
      <URL value="@Login.css" />
    </stylesheets>

</GridPane>

SOAPFaultException部署在Tomcat上时,但在GlassFish中工作正常 - java

朋友们,我一直在尝试很多,阅读了很多论坛,但无法理解为什么出现此问题。我使用契约优先方法创建了一个Jax-WS WebService。创建WSDL和XSD,然后使用wsimport工具生成其余工件,为SEI提供实现。将WebService应用程序部署到Eclipse Helios中的GlassFish(Glassfish适配器和Eclipse中安装的插件)。…

页面加载而不是提交时发生struts验证 - java

请原谅我;我对Struts有点陌生。我遇到一个问题,即页面加载而不是我实际提交表单时发生了验证。我整天都在论坛上搜寻和搜寻,没有任何运气。我显然做错了一些事情,应该很容易确定,但是我还没有发现问题所在。这是我的struts.xml的片段:<action name="*Test" method="{1}" clas…

DataSourceTransactionManager和JndiObjectFactoryBean和JdbcTemplate的用途是什么? - java

以下的用途是什么:org.springframework.jdbc.core.JdbcTemplate org.springframework.jdbc.datasource.DataSourceTransactionManager org.springframework.jndi.JndiObjectFactoryBean <tx:annotatio…

Struts2中的错误处理 - java

我对如何在Struts2中进行错误处理感到困惑。我希望在发生错误时将用户引导到一个中心页面。此外,当发生错误时,我希望将其记录下来,因为我使用的是log4j,因此我将其记录为log.error(e.getMessage(), e);但是,在动作类中,如果我捕获到错误(将我的所有代码放入try / catch中),则不会出现中央/常见错误页面。因此,我决定不捕…

表单提交发送不需要的GET请求 - java

我正在尝试使用HTML表单将数据提交到我的Spring / Thymeleaf服务器。当我使用POST方法提交时,第二个请求将使用相同的URL发送,但带有附加的“?error”查询参数和GET方法。此后续请求导致错误,因为它不携带POST请求主体中存在的信息,并且我必须以某种方式处理此第二个请求。在我的检查器窗口中,它说第二个请求是由第一个请求以某种方式发起…