小编j w*_*ill的帖子

如何在资源文件夹中引用javafx fxml文件?

我正在创建一个javafx GUI应用程序,我的项目是一个maven配置的项目.我希望能够在我的控制器中引用我的fxml文件:

FXMLLoader.load(getClass().getResource("main.fxml"); 
Run Code Online (Sandbox Code Playgroud)

我的main.fxml文件位于src/main/resources文件夹中,而我的控制器位于src/main/java文件夹中.我该怎么做呢?我的src/main/resources文件夹位于构建路径中,我可以从src/main/java文件夹中的类调用src/main/resources文件夹中的.properties文件.

编辑

我试图将fxml文件放在主资源文件夹的相应目录中:

在此输入图像描述

但我仍然有一个错误.

java resources javafx buildpath fxml

28
推荐指数
2
解决办法
6万
查看次数

如何使用相同的模型对象初始化JavaFX控制器?

脚本

我正在创建一个GUI,其中多个视图引用相同的模型对象.

我习惯了什么

在Swing中,如果我希望所有视图都引用相同的模型,我会将模型传递给构造函数.

我目前正在做什么

在JavaFX中,我通过在每个视图/控制器加载后在视图/控制器(菜单栏,拆分窗格,制表符......)中设置setter方法来传递模型.我发现这非常俗气和笨重.另外,我发现它不起作用,因为在某些情况下我需要在初始化某些控制器小部件之前模型已经存在于控制器中.

Lackluster Alternatives

(注意:我正在引用这些stackoverflow问题:

  • Controller.java文件中的Javafx 2.0操作方法Application.getParameters()
  • 传递参数JavaFX FXML
  • 带控制器的多个FXML,共享对象
  • 加载FXML时将参数传递给控制器)

  • 依赖注入

    • 我看过这个网站,http: //www.zenjava.com/2011/10/23/javafx-2-0-fxml-and-spring/,我看了一下google Guice,但我不知道看不到简单地给每个JavaFX视图/控制器提供相同模型对象的方法.看起来注入会为每个视图/控制器注入不同的模型.
  • 将模型对象保存为公共静态变量

    • 这是一个选项,但目前我不喜欢让公共静态模型如此开放和可用的想法.显然,我可以使它成为一个私有静态变量,并有getter和setter,但我也不喜欢这个想法.
  • 将参数从调用者传递到控制器

    • 我希望每个控制器在其构造函数中加载自身,并且我希望每个自定义控制器自动注入其父控制器.例如,卡片概述选项卡会像这样加载自身:

      public CardOverviewTab() {
          FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("card_overview_tab.fxml"));
          fxmlLoader.setRoot(content);
          fxmlLoader.setController(this);
      
          try {
              fxmlLoader.load();
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
      
      Run Code Online (Sandbox Code Playgroud)
    • 并且SingleGameSetup控制器将卡概述选项卡自动注入变量:

      public class SingleGameSetupController extends AnchorPane {
      
          @FXML private CardOverviewTab cardOverviewTab;
      
          // Rest of the class
      }
      
      Run Code Online (Sandbox Code Playgroud)
    • 包含卡片概述选项卡的fxml部分如下所示:

      <CardOverviewTab fx:id="cardOverviewTab" />
      
      Run Code Online (Sandbox Code Playgroud)
    • 这样我不需要担心手动加载控制器,但我仍然有设置模型的问题.

  • 在FXMLLoader上设置控制器

    • 此选项与我习惯的类似,将模型作为参数传递给构造函数,但它仍然存在使用FXMLLoader手动加载控制器的问题.
  • 活动巴士

    • 我没有读太多内容,但从我所看到的事件总线似乎是不活跃和过时的.
  • 独生子

    • 这类似于对控制器可以检索的模型对象的公共静态引用,但我再次寻找更好的解决方案.另外,我不想要单身模型.

我在寻找什么

有没有办法以不那么繁琐的方式传递模型对象?我正在寻找一种简单的方法,如将模型传递给构造函数,但我不想处理通过FXMLLoader手动加载控制器,或者在加载控制器后设置模型.也许有一个类来检索模型是最好的选择,但我要求以防万一有更好的方法.

java dependency-injection controller javafx fxml

26
推荐指数
1
解决办法
3万
查看次数

如何使用不同的fxml文件创建多个javafx控制器?

我一直在看一些博客和其他stackoverflow问题,我没有看到我的问题的直接答案.我正在创建一个javafx gui客户端,我希望我的菜单栏在一个fxml中是一个控制器,然后我希望内容区域是额外的fxml文件.登录屏幕将是一个fxml,登录屏幕将是应用程序的主要内容,并将在一个fxml中.我该怎么做呢?

我只是不想在同一个文件中拥有我的登录,菜单栏和主要内容的所有代码.这是我正在做的工作的图像:

在此输入图像描述

java controller javafx javafx-2 fxml

22
推荐指数
2
解决办法
5万
查看次数

没有使用Java 8 Eclipse设置Root错误

最近我为我的JavaFX应用程序安装了Java 8 build 124,我开始收到这些错误:

javafx.fxml.LoadException: Root hasn't been set. Use method setRoot() before load.
/Users/jonathan/Projects/Dominion/target/classes/dominion/application/controller/main_overview_tab.fxml:13

at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2613)
at javafx.fxml.FXMLLoader.access$100(FXMLLoader.java:104)
at javafx.fxml.FXMLLoader$RootElement.constructValue(FXMLLoader.java:1320)
at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:740)
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2723)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
at dominion.application.controller.MainOverviewTab.initView(MainOverviewTab.java:64)
at dominion.application.controller.MainOverviewTab.initializeController(MainOverviewTab.java:55)
at dominion.application.controller.GameSetupController.<init>(GameSetupController.java:37)
at dominion.application.controller.DashboardController.<init>(DashboardController.java:40)
at dominion.application.controller.MainController.<init>(MainController.java:37)
at dominion.application.Dominion.start(Dominion.java:18)
at com.sun.javafx.application.LauncherImpl$8.run(LauncherImpl.java:837)
at com.sun.javafx.application.PlatformImpl$7.run(PlatformImpl.java:335)
at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:301)
at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:298)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl$6.run(PlatformImpl.java:298)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)

javafx.fxml.LoadException: Root hasn't been set. Use method setRoot() before load.
/Users/jonathan/Projects/Dominion/target/classes/dominion/application/controller/players_tab.fxml:13

at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2613)
at javafx.fxml.FXMLLoader.access$100(FXMLLoader.java:104)
at javafx.fxml.FXMLLoader$RootElement.constructValue(FXMLLoader.java:1320)
at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:740)
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2723)
at …
Run Code Online (Sandbox Code Playgroud)

java macos javafx java-8 javafx-8

18
推荐指数
1
解决办法
1万
查看次数

在IDE中运行Vertx

有没有办法在IDE中运行Vertx?我知道我可以在文件中创建服务器然后调用

vertx run server.java
Run Code Online (Sandbox Code Playgroud)

从命令行,但是有没有办法从IDE中运行server.java文件?

eclipse ide netbeans intellij-idea vert.x

14
推荐指数
3
解决办法
2万
查看次数

获取JavaFX GridPane中的行数?

我通过SceneBuilder初始化了一个GridPane,在控制器内部我想有条件地向GridPane添加一行.我不想为我初始化的行数存储一个int,我希望能够从GridPane对象中获取行数.那可能吗?

java layout javafx pane javafx-2

9
推荐指数
2
解决办法
1万
查看次数

具有太多可观察量的RxJava1 StackOverflow异常

我正在使用rxjava1开发一个项目,我有一个Observable链,偶尔会包含数千个可合并或连接在一起的observable.当发生这种情况时,将发生StackOverflow异常,我们将得到如下内容:

java.lang.StackOverflowError
    at java.util.HashMap.putVal(HashMap.java:631)
    at java.util.HashMap.put(HashMap.java:612)
    at rx.internal.operators.OnSubscribeToMap$ToMapSubscriber.onNext(OnSubscribeToMap.java:127)
    at rx.internal.operators.OnSubscribeFilter$FilterSubscriber.onNext(OnSubscribeFilter.java:76)
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitScalar(OperatorMerge.java:395)
    at rx.internal.operators.OperatorMerge$MergeSubscriber.tryEmit(OperatorMerge.java:355)
    at rx.internal.operators.OperatorMerge$InnerSubscriber.onNext(OperatorMerge.java:846)
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitScalar(OperatorMerge.java:395)
    at rx.internal.operators.OperatorMerge$MergeSubscriber.tryEmit(OperatorMerge.java:355)
    at rx.internal.operators.OperatorMerge$InnerSubscriber.onNext(OperatorMerge.java:846)
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitScalar(OperatorMerge.java:395)
    at rx.internal.operators.OperatorMerge$MergeSubscriber.tryEmit(OperatorMerge.java:355)
    at rx.internal.operators.OperatorMerge$InnerSubscriber.onNext(OperatorMerge.java:846)
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitScalar(OperatorMerge.java:395)
    at rx.internal.operators.OperatorMerge$MergeSubscriber.tryEmit(OperatorMerge.java:355)
    at rx.internal.operators.OperatorMerge$InnerSubscriber.onNext(OperatorMerge.java:846)
    at rx.internal.operators.OperatorMerge$MergeSubscriber.emitScalar(OperatorMerge.java:395)
    at rx.internal.operators.OperatorMerge$MergeSubscriber.tryEmit(OperatorMerge.java:355)
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪将持续数百行.我见过的唯一相关帖子是github中的这个问题:https://github.com/ReactiveX/RxJava/issues/3035.但是建议的将可观察量添加到列表中的解决方案是我们使用过的并且不起作用的.

我该怎么做才能防止这些StackOverflow异常?我需要做某种节流或背压吗?

以下是当前代码的示例以及导致stackoverflows的示例:

public Observable<Map<String, JsonObject>> extractTopLevelSummariesFromForms(JsonArray summaries, Func2<String, String, Observable<JsonObject>> summaryGatherer) {
    List<Observable<JsonObject>> summaryObservables = new LinkedList<>();
    summaries.stream()
             .map(JsonUtil::safeJsonObject)
             .filter(summary -> StringUtils.isNotEmpty(summary.getString(NAME))|| StringUtils.isNotEmpty(summary.getString(Form.TITLE)))
             .forEach(summary -> {
                 if (StringUtils.isNotEmpty(summary.getString(TEXT)))
                     summaryObservables.add(gatherSummariesFromElement(summary.getString(Summary.SHORT_NAME), Summary.SummaryValues.FORM,
                                                                       summary.getString(Summary.SHORT_NAME) + ".hidden",
                                                                       summary.getString(VALUE), summaryGatherer));
                 if (StringUtils.isNotEmpty(summary.getString(Form.TEXT))) …
Run Code Online (Sandbox Code Playgroud)

java stack-overflow exception rx-java

8
推荐指数
1
解决办法
241
查看次数

JavaFX KeyEvent返回KeyCode.UNDEFINED

我创建了一个简单的JavaFX应用程序,它接收来自TextField中用户的输入.我将KeyTyped事件从SceneBuilder附加到控制器.我的功能看起来像这样:

@FXML private void keyTyped(KeyEvent event) {
    System.out.println(event.getCode().equals(KeyCode.ENTER));
}
Run Code Online (Sandbox Code Playgroud)

当我输入回车键时,此功能始终打印出UNDEFINED.有想法该怎么解决这个吗?我输入的其他字母似乎也有同样的问题.

java javafx input keyevent javafx-2

7
推荐指数
1
解决办法
5294
查看次数

如何使用log4j2为不同的类使用不同的日志记录级别?

在log4j2文档log4j2 java配置中,默认配置是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)

这将为控制台生成ERROR或FATAL级别的日志记录.我的默认日志记录以相同的方式工作.我遇到的问题是当我这样做的时候:

<logger name="com.foo.Bar" level="TRACE"/>
<Root level="ERROR">
  <AppenderRef ref="STDOUT">
</Root>
Run Code Online (Sandbox Code Playgroud)

根据文档,log4j2 java配置,这样就可以了

消除除com.foo.Bar之外的所有TRACE输出.

另一方面,我的实现就好像是

<logger name="com.foo.Bar" level="TRACE"/>
Run Code Online (Sandbox Code Playgroud)

甚至没有.它仍然只会打印错误日志.

问题

  • 还有其他人遇到过这个问题吗?
  • 任何人都可以复制它吗?
  • 有谁知道如何修理它?我几乎会给别人一美元.不过,我肯定会满足于将答案标记为绿色.

以下是有关我的设置的一些信息:

Maven依赖

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.0-beta9</version>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.0-beta9</version>
      </dependency>
    <dependency>
Run Code Online (Sandbox Code Playgroud)

其他

我在适当的班级测试这个.我正在运行JUnit测试文件.我使用了src/main .xml文件,并且我使用了src/test .xml文件.两者最终都得到了相同的结果.

结束目标

我的最终目标是让特定的记录器发送SMTP请求.我很确定我知道如何做到这一点,我只是在努力解决这个小问题

java configuration slf4j smtpappender log4j2

6
推荐指数
1
解决办法
5701
查看次数

可以从命令行更新 Helm value.yaml 文件吗?

我使用 gitlab 作为我的构建管道,并使用 helm 来打包我的应用程序。

当我的应用程序构建成功时,我想使用新的图像标签更新我的图表存储库。

有没有办法从 helm cli 更新 helm 图表的 value.yaml 文件?

yaml gitlab gitlab-ci kubernetes-helm

5
推荐指数
1
解决办法
1468
查看次数