java - Javafx中的时间测量图表
问题描述
我想做一个图表,显示特定方法的执行时间,该方法执行多次,执行次数是随机的,这意味着时间并不总是相同的。我的问题是如何将我的数组“样本”中的数据整合到图表中,以便正确显示数据。现在它没有在图表中显示任何内容,我只能看到没有任何内容的网格。我做错了什么,它不起作用?这是我的代码:
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
// TODO Auto-generated method stub
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
// TODO Auto-generated method stub
StackPane pane = new StackPane();
Scene scene = new Scene(pane, 1000, 600);
Button start = new Button();
int n = (int) Math.floor(Math.random() * 100);
start.setText("Start");
start.setStyle("-fx-font-size: 30;");
start.setOnAction(e->{
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
long[] sample = run(n);
start.setVisible(false);
analyse(sample, pane);
});
pane.getChildren().add(start);
primaryStage.setTitle("Time statistics");
primaryStage.setScene(scene);
primaryStage.show();
}
private void analyse(long[] sample, StackPane pane) {
// TODO Auto-generated method stub
long max = sample[0];
for (int i = 0; i < sample.length; ++i) {
if (sample[i] > max) {
max = sample[i];
}
}
//Create Chart
//Create the X-Axis
NumberAxis xAxis = new NumberAxis();
xAxis.setLabel("Run number");
xAxis.setLowerBound(0);
xAxis.setUpperBound(100);
xAxis.setTickUnit(1);
//Create the Y-Axis
NumberAxis yAxis = new NumberAxis();
yAxis.setLabel("Time");
//Create Line Chart
LineChart<Number, Number> chart = new LineChart<Number, Number>(xAxis, yAxis);
chart.setTitle("Time measurement");
//Set the data for the chart
ObservableList<XYChart.Series<Number,Number>> chartData = FXCollections.<XYChart.Series<Number, Number>>observableArrayList();
chart.setData(chartData);
//Set properties of the StackPane
pane.setStyle("-fx-padding: 10;" +
"-fx-border-style: solid inside;" +
"-fx-border-width: 2;" +
"-fx-border-insets: 5;" +
"-fx-border-radius: 5;" +
"-fx-border-color: blue;");
pane.getChildren().add(chart);
}
private long[] run(int n) {
// TODO Auto-generated method stub
long[] delta = new long[n];
while (n > 0) {
long startTime = System.nanoTime();
execute();
delta[delta.length - n] = System.nanoTime() - startTime;
--n;
}
return delta;
}
/**
* Output of a random number between 0 and 100
*/
private void execute() {
// TODO Auto-generated method stub
int n = (int) Math.floor(Math.random() * 100);
int count = 0;
while (n != 0) {
++count;
--n;
}
System.out.println("Random number:");
System.out.println(count);
}
}
解决方案
推荐阅读
- python-3.x - 'ValueError: 在日/周/月/年转换日期时无法将浮点 NaN 转换为整数'
- laravel - 在 v-for 中的 v:bind 中使用动态名称
- javascript - 单击项目后关闭css悬停下拉菜单
- vue.js - 将“活动”类添加到 Nuxt.js Bootstrap
- excel - 初始化时清除用户表单
- c# - 找不到 ODBC 的数据提供程序
- powershell - 如何使用 Ansible 中的自定义事实从 Windows 主机检索已安装软件的列表
- mongodb - Kmongo (Kotlin Server + Mongo) 的 Ktor 服务器配置问题
- regex - PowerShell将字符串切成两半
- git - 执行 git pull 后使用 difftool