gpt4 book ai didi

JavaFX 进度条在调整大小后导致严重的窗口滞后

转载 作者:可可西里 更新时间:2023-11-01 10:05:11 25 4
gpt4 key购买 nike

问题

我有一个大小合适的 javaFX 窗口,在我调整应用程序中任何窗口的大小之前,它看起来运行良好。调整大小后,所有具有下拉或类似操作的组件(即 MenuComboBoxTabPane)变得非常慢。

原因

我已将问题缩小到进度条,如果我从场景中删除进度条,我可以根据需要调整窗口的大小,如果我添加它,那么任何窗口都会调整大小,它们开始变成大约半秒钟没有反应;如果我进行大量调整,有时需要两秒钟。

窗口

窗口 View ,以便您可以看到所有组件。

The window with the progress bar

我无法添加所有窗口代码,因为它的发布方式太多了。

带进度条的类

/**
* The class that holds and displays the progress bar
*/
public class BottomToolBarImpl extends ToolBar {

/**
* The label that display the "Waiting for input" text at the bottom of the
* window
*
* The {@code LLabel()} class is a label that gets its text from a
* properties file
*/
private final Label text = new LLabel().setTextKey("waiting").register();

/**
* This is the progress bar itself that is causing the problem
*/
private final ProgressBar progressBar = new ProgressBar();

/**
* Constructs the tool bar and adds the components
*/
public BottomToolBarImpl() {
super();
addItems();
}

/**
* Adds the progress bar and label the this object
*/
private void addItems() {
Region r = new Region();
r.setMaxWidth(Double.MAX_VALUE);
HBox.setHgrow(r, Priority.ALWAYS);

progressBar.setMinWidth(192);//This line has no effect on the performance

this.getItems().add(r);
this.getItems().add(text);
this.getItems().add(progressBar);//If i comment out this line then all works perfectly
}
}

附加信息

  • 窗口中的大部分可见组件(即 TableViewToolBarListView)都是实现。我怀疑是这个问题

  • 许多广泛使用的组件,例如 ButtonsLabels 都是实现接口(interface)的实现,该接口(interface)允许它们使用 key ,然后获取 key 语言文件中文本的值。这在渲染方面没有太大作用,也不经常调用,所以我也怀疑这是问题所在。

  • 窗口启动得相当快(不到一秒)。

  • 我有一台游戏电脑,所以我的硬件应该不是问题。

  • Java 版本:1.8.0_40(内部版本 1.8.0_40-b25)64 位


我想我在这里问的是有没有其他人有这个问题,如果有,你是如何解决的?
你知道可能是什么问题吗?我不认为这是一个错误,因为谷歌没有任何/很多结果。

任何帮助将不胜感激,因为我完全被困在这里。

重现结果的 mcve

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.ToolBar;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {

public static void main(String[] args) {
launch(args);
}

@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Reproduce problem");

final StackPane root = new StackPane();
primaryStage.setScene(new Scene(root, 500, 400));

final VBox layout = new VBox(10);

layout.getChildren().addAll(new MenuImpl(), new ProgressToolBar());

root.getChildren().add(layout);
primaryStage.show();
}

private class ProgressToolBar extends ToolBar {

private final Label text = new Label("Random Text Here");

private final ProgressBar progressBar = new ProgressBar();

public ProgressToolBar() {
super();
addItems();
}

private void addItems() {
Region r = new Region();
r.setMaxWidth(Double.MAX_VALUE);
HBox.setHgrow(r, Priority.ALWAYS);

progressBar.setMinWidth(192);

this.getItems().add(r);
this.getItems().add(text);
this.getItems().add(progressBar); //Still causes the problem
}
}

private class MenuImpl extends MenuBar {

public final Menu FILE = new Menu("File", null, new MenuItem("A"), new MenuItem("B"), new MenuItem("C"));

public MenuImpl() {
super();
this.getMenus().addAll(FILE);
}
}
}

单击"file"菜单并滚动浏览调整窗口大小前后的项目。

最佳答案

问题似乎与这个错误有关:

[Windows] Very poor performance of application (or Menus) when using an Animation .

作为解决方法,使用 -Dprism.vsync=false-Dprism.order=sw 作为 VM 参数运行程序。

关于JavaFX 进度条在调整大小后导致严重的窗口滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32946564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com