gpt4 book ai didi

java - 测试加载消息

转载 作者:行者123 更新时间:2023-12-02 06:10:14 24 4
gpt4 key购买 nike

我创建了这个用于加载 Java 对象的简单测试。但不幸的是我不能将它用于 SQL 查询的大规模测试。

import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.collections.ObservableList;
import javafx.concurrent.Service;
import javafx.concurrent.Task;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Region;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class MainApp extends Application
{

GetDailySalesService service = new GetDailySalesService();
TestData obj;

@Override
public void start(Stage stage) throws Exception
{

obj = new TestData();

HBox hb = new HBox(100);

Tab tabA = new Tab("test");

Button button = new Button("Test");

///////////
Region veil = new Region();
veil.setStyle("-fx-background-color: rgba(0, 0, 0, 0.4)");
veil.setPrefSize(240, 160);
ProgressIndicator p = new ProgressIndicator();
p.setMaxSize(140, 140);

p.progressProperty().bind(service.progressProperty());
veil.visibleProperty().bind(service.runningProperty());
p.visibleProperty().bind(service.runningProperty());
//tableView.itemsProperty().bind(service.valueProperty());
//tableView.setMinSize(240, 140);
StackPane stack = new StackPane();
stack.getChildren().addAll(obj.someData(), veil, p);

service.start();

//////////////////
button.setOnAction(new EventHandler<ActionEvent>()
{
@Override
public void handle(ActionEvent e)
{
tabA.setContent(stack);
}
});

TabPane tb = new TabPane();
tb.setPrefSize(300, 300);

tb.getTabs().add(tabA);

hb.getChildren().addAll(button, tb);

hb.setPadding(new Insets(20, 20, 20, 20));
hb.setAlignment(Pos.CENTER);
Scene scene = new Scene(hb, 500, 300);

stage.setTitle("JavaFX and Maven");
stage.setScene(scene);
stage.show();
}

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

class TestData
{

public Label someData() throws InterruptedException
{

Label lb = new Label("It's working!!!!");

Thread.sleep(6000);

return lb;
}
}

class GetDailySalesService extends Service<ObservableList<Object>>
{

@Override
protected Task createTask()
{
return new GetDailySalesTask();
}
}

class GetDailySalesTask extends Task<ObservableList<Object>>
{

@Override
protected ObservableList<Object> call() throws Exception
{

return (ObservableList<Object>) obj.someData();
}
}
}

你能告诉我这是实现此测试和改进代码的正确方法吗?

最佳答案

当您在内部调用obj.someData()

stack.getChildren().addAll(obj.someData(), veil, p);

你实际上是直接从 UI 线程调用它,我不知道为什么!尽量不要这样做。如果它真的很重要,请尝试删除

Thread.sleep(6000);

其次,您正在使用 Service 类实例,但您从未使用过它。请仔细阅读 JavaFX Concurrency 中的文档.

作为一个建议,首先尝试仅使用 Task ,在前往服务之前

如果仍有疑问,请随时发表评论!

关于java - 测试加载消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21959889/

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