我想从绝对路径或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请求主体中存在的信息,并且我必须以某种方式处理此第二个请求。在我的检查器窗口中,它说第二个请求是由第一个请求以某种方式发起…