标签: javafx

如何停止"JavaFX应用程序线程"

我有一个简单的控制台应用程序,有时需要执行图形操作,对于那些我正在使用JavaFx框架(我需要一些函数,如文本的CSS样式)我只是生成一些形状和文本到一个隐藏的场景然后保存那些存档的,就是这样,

我知道要使用JavaFx我必须将图形操作传递给JavaFx线程,但是当一切都完成后我必须关闭应用程序(几个小时后),这个JavaFx线程仍然保持打开状态......我真的不会想要强制退出System.exit(),因为如果有什么东西被阻止我可能想知道/等待(我也不想将所有内容都作为JavaFx应用程序执行(因为JavaFx组件不到我主应用程序的1%)

代码非常简单,谷歌搜索我发现只使用

Platform.exit();
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用,我也试过玩平台参数,如

Platform.setImplicitExit(false);
Run Code Online (Sandbox Code Playgroud)

这是我可以运行的测试应用程序:

import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.geometry.Pos;
import javafx.scene.layout.VBox;

public class SOTestFX {
    public static void main(String[] args) {
        SOTestFX t = new SOTestFX();
        t.runFxThread();
    }

    public  void runFxThread(){
        //Application.launch(args);
        final JFXPanel jfxPanel = new JFXPanel(); 
        Platform.runLater(new Runnable() {
            @Override
            public void run() {

                System.err.println("CREATING IMAGE");
                simpleFXoperations();
                System.err.println("NOW CALL EXIT");
                System.err.println("JAVA FX THREAD SHOULD BE EXITED NOW");
                Platform.exit();
            }
        });

        try {
            Thread.sleep(3000); // just wait a bit if something should happen, let it …
Run Code Online (Sandbox Code Playgroud)

java javafx javafx-2

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

FXMLLoader getController返回NULL?

我有主要的应用程序类,可以执行以下操作:

   @Override
   public void start(Stage primaryStage) {
      try {
         FXMLLoader loader = new FXMLLoader(getClass().getResource(
               "RecordScreen.fxml"));
         Parent root = (Parent) loader.load();
         Scene newScene = new Scene(root);
         Stage newStage = new Stage();
         newStage.setScene(newScene);
         newStage.show();
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
Run Code Online (Sandbox Code Playgroud)

它启动一个显示人物的表格视图.我选择一个人,点击编辑按钮,然后尝试启动一个允许我编辑它们的窗口.

   @FXML
   public void editPerson() {
      try {
         FXMLLoader loader = new FXMLLoader(getClass().getResource(
               "PersonEditor.fxml"));
         PersonEditorCtrl ctrl = loader.getController();
         ctrl.init(table.getSelectionModel().getSelectedItem());
         Parent root = (Parent) loader.load();
         Scene newScene = new Scene(root);
         Stage newStage = new Stage();
         newStage.setScene(newScene);
         newStage.show();
      } catch (Exception e) …
Run Code Online (Sandbox Code Playgroud)

javafx fxml

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

JavaFX 8 - 定位HBox的文本垂直中心

我很难将文本放在HBox中.我能够设置文本的水平对齐,但我无法设置文本的垂直对齐.我试图在Hbox的垂直中心设置文本,但它出现在顶部.

任何帮助将非常感激.

// Create The Updates Progress Bar At The Bottom Of The Window
HBox checkUpdatesBar = new HBox();
checkUpdatesBar.setId("checkUpdatesBar");
checkUpdatesBar.setPrefSize(CHECK_PANE_WIDTH, CHECK_PANE_HEIGHT);
checkUpdatesBar.setMinSize(CHECK_PANE_WIDTH, CHECK_PANE_HEIGHT);
checkUpdatesBar.setMaxSize(CHECK_PANE_WIDTH, CHECK_PANE_HEIGHT);

// Create The 'Check For Updates...' Text
Text checkForUpdates = new Text();
checkForUpdates.setFont(Font.font("Arial Black", FontWeight.BLACK, 15));
checkForUpdates.setWrappingWidth(CHECK_PANE_WIDTH / 2.8);
checkForUpdates.setFill(Color.WHITE);
checkForUpdates.setTextAlignment(TextAlignment.CENTER);
checkForUpdates.setText("Checking For Updates ...".toUpperCase());

checkUpdatesBar.getChildren().add(checkForUpdates);
Run Code Online (Sandbox Code Playgroud)

我的代码生成以下内容:http://puu.sh/ccEkp/41a26038a4.png

我喜欢我的水平定位.我知道它不在中间,因为我将它设置为那样.但是,我只关心垂直定位.

我分别尝试了以下内容:

checkForUpdates.setLayoutY(20);
checkForUpdates.setY(20);
Run Code Online (Sandbox Code Playgroud)

我选择数字20是因为我想将文本从HBox顶部向下移动20个像素.我在Photoshop中计算了这个值.虽然如果有更好的方法将文本设置为HBox的垂直中心,请赐教.

再次感谢您的帮助!

java javafx javafx-8

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

JavaFX中的Z-Order

如何VBox在JavaFX中设置Z-order ?

java javafx z-order vbox

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

在JavaFX CSS中指定外部字体

是否可以在JavaFX应用程序中使用CSS指定字体?我有一个FXML场景和相应的CSS文件.在Java代码中,可以使用以下setFont方法指定字体:

text.setFont(Font.loadFont("file:resources/fonts/SourceSansPro-Bold.ttf", 12));
Run Code Online (Sandbox Code Playgroud)

我试过不同的结构,比如:

-fx-font-family: url("../fonts/SourceSansPro-Bold.ttf");
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

css fonts javafx

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

在Swing JFrame上添加WebView控件

我正在研究与JavaFX控件混合的Swing应用程序.

我创建了一个JavaFX控件(WebView)来浏览HTML文件.但我想知道,如何在Swing的容器上添加此Web视图控件JFrame

java swing javafx awt javafx-2

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

为什么Platform.runLater不检查它当前是否在JavaFX线程上?

使用JavaFX 8时,我们需要通过GUI运行与GUI的交互Platform.runLater,否则如果从另一个线程运行它们将抛出异常.

但是执行Platform.runLater永远不会检查它当前是否在JavaFX线程上.

我写了以下方法:

public static void runSafe(final Runnable runnable) {
    Objects.requireNonNull(runnable, "runnable");
    if (Platform.isFxApplicationThread()) {
        runnable.run();
    }
    else {
        Platform.runLater(runnable);
    }
}
Run Code Online (Sandbox Code Playgroud)

这可以确保它永远不会在非fx应用程序线程上运行.

是否有任何理由认为默认实现不会发生这种短路?

java javafx javafx-8

16
推荐指数
2
解决办法
5255
查看次数

JavaFx - SceneBuilder中的Tab键顺序

如何为元素设置Tab键顺序(焦点顺序),例如SceneBuilder中的文本字段?

java javafx

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

如何在comboBox javafx中设置默认值?

我需要设置为默认值ComboBoxObservableArrayList,我想在我的设置第一个值ArrayList作为默认值.

List = FXCollections.observableArrayList(arrayList);
comboBox.setItems(List);
Run Code Online (Sandbox Code Playgroud)

java javafx

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

使用JDK 11+运行JavaFX应用程序

如果我理解Oracle的公告,JavaKX将不会从JDK 11开始包含在JDK中,并且只能作为OpenJFX使用.

作为软件开发人员,我必须采取哪些步骤才能使用JDK 11+运行我的JavaFX应用程序?有什么好的adivce吗?将通过Gradle提供OpenJDK吗?

java javafx javafx-8 openjfx

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

标签 统计

javafx ×10

java ×8

javafx-8 ×3

javafx-2 ×2

awt ×1

css ×1

fonts ×1

fxml ×1

openjfx ×1

swing ×1

vbox ×1

z-order ×1