我想在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());
}
}