Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java maven构建后未加载的某些场景_Java_Maven_Netbeans_Javafx_Java 8 - Fatal编程技术网

Java maven构建后未加载的某些场景

Java maven构建后未加载的某些场景,java,maven,netbeans,javafx,java-8,Java,Maven,Netbeans,Javafx,Java 8,我正在netbeans中开发JavaFx应用程序,在netbeans中,项目正在构建并运行良好 我从我的项目中创建了一个构建(mvn包),它完成时没有错误,但是当我启动程序时,它没有加载所有场景,在这种情况下,FXMLLoader返回空值 同一文件夹中的所有.fxml文件 public class JavaFXApplication extends Application { public static final String TOOLBAR_MAIN = "toolbarMain"

我正在netbeans中开发JavaFx应用程序,在netbeans中,项目正在构建并运行良好

我从我的项目中创建了一个构建(mvn包),它完成时没有错误,但是当我启动程序时,它没有加载所有场景,在这种情况下,FXMLLoader返回空值

同一文件夹中的所有.fxml文件

public class JavaFXApplication extends Application {

    public static final String TOOLBAR_MAIN = "toolbarMain";
    public static final String TOOLBAR_MAIN_FXML = "/fxml/ToolbarMain.fxml";
    public static final String TOOLBAR_SUB = "toolbarSub";
    public static final String TOOLBAR_SUB_FXML = "/fxml/ToolbarSub.fxml";

    public static final String NEW_SESSION_PANEL = "newSession";
    public static final String NEW_SESSION_PANEL_FXML = "/fxml/NewSessionPanel.fxml";
    public static final String OPEN_SESSION_PANEL = "openSession";
    public static final String OPEN_SESSION_PANEL_FXML = "/fxml/OpenSessionPanel.fxml";
    public static final String CONNECTIONS_PANEL = "connections";
    public static final String CONNECTIONS_PANEL_FXML = "/fxml/ConnectionsPanel.fxml";
    public static final String LOGS_PANEL = "logs";
    public static final String LOGS_PANEL_FXML = "/fxml/LogsPanel.fxml";
    public static final String EXCEPTIONS_PANEL = "exceptions";
    public static final String EXCEPTIONS_PANEL_FXML = "/fxml/ExceptionsPanel.fxml";
    public static final String MESSAGES_PANEL = "messages";
    public static final String MESSAGES_PANEL_FXML = "/fxml/MessagesPanel.fxml";

    public static ScreensController menuContainer = new ScreensController();
    public static ScreensController contentContainer = new ScreensController();

    public static ServerService server = new ServerService();

    public static Stage STAGE;

    @Override
    public void start(Stage primaryStage) throws Exception {

        STAGE = primaryStage;

        primaryStage.setOnCloseRequest((WindowEvent t) -> {
            if (server.isRunning()) {
                server.cancel();
            }
        });

        menuContainer.loadScreen(JavaFXApplication.TOOLBAR_MAIN,
                JavaFXApplication.TOOLBAR_MAIN_FXML);
        menuContainer.loadScreen(JavaFXApplication.TOOLBAR_SUB,
                JavaFXApplication.TOOLBAR_SUB_FXML);

        contentContainer.loadScreen(JavaFXApplication.NEW_SESSION_PANEL,
                JavaFXApplication.NEW_SESSION_PANEL_FXML);
        contentContainer.loadScreen(JavaFXApplication.OPEN_SESSION_PANEL,
                JavaFXApplication.OPEN_SESSION_PANEL_FXML);
        contentContainer.loadScreen(JavaFXApplication.NEW_SESSION_PANEL,
                JavaFXApplication.NEW_SESSION_PANEL_FXML);
        contentContainer.loadScreen(JavaFXApplication.CONNECTIONS_PANEL,
                JavaFXApplication.CONNECTIONS_PANEL_FXML);
        contentContainer.loadScreen(JavaFXApplication.LOGS_PANEL,
                JavaFXApplication.LOGS_PANEL_FXML);
        contentContainer.loadScreen(JavaFXApplication.EXCEPTIONS_PANEL,
                JavaFXApplication.EXCEPTIONS_PANEL_FXML);
        contentContainer.loadScreen(JavaFXApplication.MESSAGES_PANEL,
                JavaFXApplication.MESSAGES_PANEL_FXML);
        menuContainer.setScreen(JavaFXApplication.TOOLBAR_MAIN);
        contentContainer.setScreen(JavaFXApplication.NEW_SESSION_PANEL);

        SplitPane root = new SplitPane();

        root.getItems().addAll(menuContainer, contentContainer);
        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();
        primaryStage.setResizable(false);
        primaryStage.setTitle("Exam Supervisor");

    }
加载屏幕的屏幕控制器:

public class ScreensController extends StackPane {

    private HashMap<String, Node> screens = new HashMap<>();

    public void addScreen(String name, Node screen) {
        screens.put(name, screen);
    }

    public boolean loadScreen(String name, String resource) {
        try {
            FXMLLoader myLoader = new FXMLLoader(getClass().getResource(resource));
            System.out.println("name:" + name + " ,resource" + resource + " ,loader:" + myLoader.getLocation());
            Parent loadScreen = myLoader.load();
            ControlledScreen myScreenControler
                    = myLoader.getController();
            myScreenControler.setScreenParent(this);
            addScreen(name, loadScreen);
            return true;
        } catch (Exception e) {
            System.out.println("name: " + name + ", resource" + resource + " ,exception: " + e.getMessage());
            return false;
        }
    }

    public boolean setScreen(final String name) {

        if (screens.get(name) != null) {
            final DoubleProperty opacity = opacityProperty();

            if (!getChildren().isEmpty()) {
                getChildren().remove(0);
                getChildren().add(0, screens.get(name));
            } else {
                getChildren().add(screens.get(name));
            }
            return true;
        } else {
            System.out.println(screens.get(name) + " ,screen hasn't been loaded!\n");
            return false;
        }

    }

    public boolean unloadScreen(String name) {
        if (screens.remove(name) == null) {
            System.out.println("Screen didn't exist");
            return false;
        } else {
            return true;
        }
    }
}
公共类屏幕控制器扩展StackPane{
私有HashMap screens=newhashmap();
公共void addScreen(字符串名称、节点屏幕){
屏幕。put(名称、屏幕);
}
公共布尔加载屏幕(字符串名称、字符串资源){
试一试{
FXMLLoader myLoader=新的FXMLLoader(getClass().getResource(resource));
System.out.println(“名称:“+name+”,资源“+resource+”,加载器:“+myLoader.getLocation());
父loadScreen=myLoader.load();
可控屏幕自动屏幕控制器
=myLoader.getController();
myScreenController.setScreenParent(此);
addScreen(名称、加载屏幕);
返回true;
}捕获(例外e){
System.out.println(“名称:“+name+”,资源“+resource+”,异常:+e.getMessage());
返回false;
}
}
公共布尔设置屏幕(最终字符串名称){
if(screens.get(name)!=null){
最终DoubleProperty不透明度=opacityProperty();
如果(!getChildren().isEmpty()){
getChildren().remove(0);
getChildren().add(0,screens.get(name));
}否则{
getChildren().add(screens.get(name));
}
返回true;
}否则{
System.out.println(screens.get(name)+”,屏幕尚未加载!\n”);
返回false;
}
}
公共布尔卸载屏幕(字符串名称){
if(screens.remove(name)==null){
System.out.println(“屏幕不存在”);
返回false;
}否则{
返回true;
}
}
}
My github repo:

尝试使用
希望能有所帮助。

我查看了您的netbeans项目文件和maven pom,没有发现任何奇怪的地方。两种配置的类路径中都不包含javafx lib,这一事实告诉我,您是在Java安装中使用它的

也许您在启动maven目标时使用了与netbeans不同的Java安装。然后,fxml模块可能丢失,或者第二次安装时没有安装java fx,或者其他不兼容的内容

您是从控制台启动maven目标的吗?e、 g

java-jar xyz.jar

试一试

java版本

并将该版本与netbeans使用的java版本进行比较(帮助>关于)

Netbeans构建由内部maven版本完成。但是,外部maven构建也可能使用与内部netbeans构建不同的java编译器版本


我希望这有帮助

在做了以下更改后,我已从Netbeans外部成功运行了您的应用程序

首先,我想知道为什么你有编译器插件。因此,我删除了它,并在构建过程中出现“未找到sun.util.logging.PlatformLogger的类文件”错误

您已经遇到了中解释的问题

你需要修理它

其次,您所拥有的只是编译阶段,而不是可运行的jar

也许可以使用编译器插件(或者在类路径中使用其他依赖jar)来实现,但我发现使用汇编插件创建包含所有依赖项的jar更容易

将以下内容添加到pom.xml中

然后呢,,
java-jar-target/SuperVisorServer-1.0-SNAPSHOT-jar-with-dependencies.jar

您将fxml作为资源的子文件夹:您在创建的jar文件中是否具有相同的结构?是的。构建创建了/target/classes/fxml结构,并且它包含所有的.fxml文件。这不是我要问的。在生成的jar文件中,fxml文件夹是在顶层,还是放在资源文件夹下?是的,它在顶层。以下是结构:
/com、/fxml、/imageRes、/META-INF、/shared、/styles、
您能为您的项目添加一个结构或验证它是否以类似的方式进行吗?通常当有人对他们的问题悬赏时,他们通常会寻找比简单链接更详细的信息。请向OP解释为什么你的建议会有帮助,以何种方式以及如何实施。就目前而言,这是一个糟糕的答案。对不起,我是新来的)。我有一个类似的问题,在我开始打包这个插件之前,也许它可以在这种情况下有所帮助。这只是一个建议。
         <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>com.eszik.supervisorserver.main.Main</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </plugin>
mvn clean install
mvn assembly:single