JavaFx中的性能问题,标签上有setText

时间:2017-06-22 19:29:32

标签: java swing javafx

我想在os linux gentoo(32bit)下编写一个Java Fx应用程序,它通过管道测量音量,并使用.setText()方法在标签上显示该值。 标签上的更新率是每20毫秒。均值方法label.setText(string)每20 ms调用一次。 在这种情况下,JVM的CPU性能非常高。大约30%!!! 如果我对java swing技术做同样的事情,cpu性能大约是7%!! Traget硬件是E3825 DualCore Intel Atom,带有2 GB Ram(嵌入式系统) Oracel java版本是jre 1.8.0.102 其他Linux发行版以及Windows 10 IoT上也存在这个问题。

非常奇怪的是,使用swing的性能要好得多。 我试着在fx的canvans上设置文本。它更好但不多。

曾经观察过相同的行为吗?

对于anwers而言。

每隔10毫秒在标签上附上一个计数器示例。我有什么不对吗?

这是java Fx的代码示例:

      package appl;

  import javafx.application.Application;
  import javafx.application.Platform;
  import javafx.scene.Scene;
  import javafx.scene.control.Button;
  import javafx.scene.layout.VBox;
  import javafx.scene.text.Font;
  import javafx.scene.text.FontPosture;
  import javafx.scene.text.FontWeight;
  import javafx.stage.Stage;

  public class Main_javafx extends Application {
            public static void main(String[] args) {
                           launch(args);
            }

            @Override
            public void start(Stage primaryStage) {
                           Label label = new Label("0000000000");
                           Button button = new Button("start");
                           VBox root = new VBox();
                           root.getChildren().add(label);
                           root.getChildren().add(button);
                           label.setFont(Font.font("Arial", FontWeight.NORMAL, FontPosture.REGULAR, 100));
                           primaryStage.setScene(new Scene(root));
                           primaryStage.show();
                           button.setOnAction(e -> {
                           new Thread(() -> {
                           for (int i = 0; i < 1000000; i++) {
                               try {
                                               Thread.sleep(10);
                               }
                               catch (Exception ex) {
                               }
                               int ii = i;
                               Platform.runLater(() -> {
                                               label.setText(String.valueOf(ii));
                               });
                           }
                           }).start();

                           });
                           primaryStage.setOnCloseRequest(e -> Platform.exit());
            }

}

0 个答案:

没有答案