私は文書ファイルのデータストレージに接続されているJavaFxプロジェクトをやっています。最近私はいくつかの特定の点では非常にゆっくりと実行することに気づいた。実行が開始されると、データ量を考慮してかなり高速なドキュメントからデータを取得し、テーブルにロードするために定義したクラスのインスタンスを作成します(ここまではOKです)。私のJavaFxアプリケーションは非常に遅いです
public void createCheckbox() {
List<String> columnnames = Arrays.asList("id", "name", "bg", "country","countryCode", "status",
"incorporationDate","aclName","aclDomain");
for (int i = 0; i <= columnnames.size() - 1 ; i++) {
ColumnConstraints column1 = new ColumnConstraints();
column1.setPercentWidth(22.0);
gridChkBoxContainer.getColumnConstraints().add(column1);
CheckBox cbs = new CheckBox(columnnames.get(i));
cbs.selectedProperty().set(true);
gridChkBoxContainer.add(cbs, i, 0);
}
}
public void createTable() {
int count = 0 ;
infoTable.getColumns().clear();
CheckBox cb;
ObservableList<Node> childrens = gridChkBoxContainer.getChildren();
for (Node node : childrens) {
cb = (CheckBox) node;
if (cb.isSelected()) {
TableColumn Col = new TableColumn(cb.getText());
Col.prefWidthProperty().bind(infoTable.widthProperty().divide(6));
Col.setCellValueFactory(new PropertyValueFactory<Report, String>(cb.getText()));
infoTable.getColumns().add(Col);
}
}
try{
infoTable.getItems().clear();
if (txtKeyword.getText().compareTo("") == 0){
strDQL = "select dm_dbo.cosec_general_view.name , dm_dbo.cosec_general_view.comp_id , dm_dbo.cosec_general_view.bg_name , dm_dbo.cosec_general_view.incorporation_date , dm_dbo.cosec_general_view.status , dm_dbo.cosec_general_view.country_name , cosec_general.acl_domain , cosec_general.acl_name , cosec_general.country_code from dm_dbo.cosec_general_view , cosec_general where dm_dbo.cosec_general_view.comp_id =cosec_general.comp_id";
}else{
strDQL = "select dm_dbo.cosec_general_view.name , dm_dbo.cosec_general_view.comp_id , dm_dbo.cosec_general_view.bg_name , dm_dbo.cosec_general_view.incorporation_date , dm_dbo.cosec_general_view.status , dm_dbo.cosec_general_view.country_name , cosec_general.acl_domain , cosec_general.acl_name , cosec_general.country_code from dm_dbo.cosec_general_view , cosec_general where dm_dbo.cosec_general_view.comp_id =cosec_general.comp_id and (UPPER(dm_dbo.cosec_general_view.comp_id) like UPPER('@aclname') or UPPER(dm_dbo.cosec_general_view.name) like UPPER('@aclname')or UPPER(dm_dbo.cosec_general_view.bg_name) like UPPER('@aclname') or UPPER(dm_dbo.cosec_general_view.incorporation_date) like UPPER('@aclname') or UPPER(dm_dbo.cosec_general_view.country_name) like UPPER('@aclname') or UPPER(dm_dbo.cosec_general_view.status) like UPPER('@aclname') or UPPER(cosec_general.acl_name) like UPPER('@aclname')or UPPER(cosec_general.acl_domain) like UPPER('@aclname')or UPPER(cosec_general.country_code) like UPPER('@aclname'))";
String searchVar = "%"+txtKeyword.getText()+"%";
strDQL = strDQL.replace("@aclname", searchVar);
}
IDfQuery ACLQuery = new DfQuery();
ACLQuery.setDQL(strDQL);
IDfCollection col = ACLQuery.execute(_session, DfQuery.DF_READ_QUERY);
while (col.next()) {
BGDetails bgInfo = new BGDetails(col.getString("comp_id"), col.getString("name"), col.getString("bg_name"),
col.getString("country_name"), col.getString("status"), col.getString("incorporation_date"),col.getString("acl_name"),col.getString("acl_domain"),col.getString("country_code"));
infoTable.getItems().add(bgInfo);
count++;
}}catch(Exception e){
Alert alert = new Alert (Alert.AlertType.ERROR , "An Error was found!");
alert.showAndWait();
}
if (count == 0){
Alert alert = new Alert(Alert.AlertType.WARNING , "No search result was found !");
alert.showAndWait();
}
}
し、テキストフィールドには、(FX:idは=「txtKeyword」)がある。そうするために私の機能であるデータを検索するためである上に。以前にフェッチしたデータを格納するのではなく、新しいDQLを作成してデータストアから再度フェッチするようにカスタマイズすることに言及する価値があります。私は、現時点では、実行に時間がかかるデータの取得ではなく、検索フィールドへの単語のキーイングが目立って遅れていることに気付きました。つまり、キーボードまたはマウスを使用してアプリをナビゲートするたびに遅れが始まり、それ以外の時間は問題ありません。どのようにすればパフォーマンスのスピードを向上させることができますか? ありがとうございます。
- コードの実行をあなたがするとき?おそらくあなたのためにいくつかの 'ChangeListener'が登録されていますか?またはテキストの変更ごとに 'createTable'メソッドが呼び出されますか? – Itai
@sillyflyテキストフィールド(txtKeyword)をクリックしてテキストを入力すると、それが遅れます(言い換えれば、テキストフィールドでクリックしたことを理解するのに時間がかかります)。データを挿入している間キーボードを使用してテキストフィールドに移動すると、私の入力速度はそれほど高くないと考えて、Dは –
私はその部分を理解しました。私は何を求めているのですか?コードのどの部分が、 'TextField'の中のテキストのすべての変更を押しますか?それは 'createTable'メソッドですか?または、その質問に含まれていない他のコード? – Itai