java - Stop Swingworkers correctly -


i want improve gui-lag-free "live search" of database jtextfield.

imagine got large database entries 0001, 0002, ... million (just example; entries contain strings). every time when press key start swingworker searching current content of jtextfield (within added documentlistener), because want search start after every press of key.

lets assume i'd search "123" , enter jtextfield...

the first swingworker starts when enter "1" , searches entries contain "1" , in it's done()-method sets model of jtable:

public static class xrefreshen_speed_up extends swingworker<void, void> {      public jxtable jxtabelle;     public string sql_anweisung;     public resultset mysqlresultset;      public string get_sql() {         return sql_anweisung;     }      public xrefreshen_speed_up(jxtable jxt, string str) {         this.jxtabelle = jxt;         this.sql_anweisung = str;      }      @override     public void doinbackground() {         try {             thread.sleep(100);             system.out.println("following query executed: " + sql_anweisung);             thread.sleep(100);             mysqlresultset = operationen_mysql.getinstance().resultset_aus_anweisung(sql_anweisung);             thread.sleep(100);             } catch (exception e) {             if (!e.getmessage().contains("sleep")) {                 joptionpane.showmessagedialog(null, "jxtable refresh: not refresh table:\n" + e.getmessage());             }         }         return null;     }      @override     public void done() {         try {             if (!iscancelled()) {                 thread.sleep(100);                 if (!iscancelled()) {                     tablemodel resultsettotablemodel = dbutils.resultsettotablemodel(this.mysqlresultset);                     if (!iscancelled()) {                     jxtabelle.setmodel(resultsettotablemodel);                     jxtabelle.packall();                      }                     //boolean bool = get();                 } else {                     system.out.println("another swingworker interrupted execution.");                 }              } else {                 system.out.println("tabellenfüllung von anderer tabellenfüllung unterbrochen");             }         } catch (exception e) {          }     }  } 

but because entered "123" there 2 more swingworkers: 1 searching entries containing "12" , 1 searching "123". searching "1" give more results , therefore swingworker take longer swingworker searching "12" or "123"... last swingworker ("123") finish first , set tablemodel of jtable... after "12"-swingworker overwrite model...and "1"-swingworker... it...

so tried following in documentlistener of jtextfield , put multiple thread.sleep swingworker (see code above):

    if(swingworker != null){                 swingworker.cancel(true);     }     swingworker = new swingworker_class(null);     swingworker.execute(); 

but somehow "1"- , "12"-swingworkers still won't stop , both overwrite tablemodel... end results of "1"-swingworker...


Comments

Popular posts from this blog

php - Invalid Cofiguration - yii\base\InvalidConfigException - Yii2 -

How to show in django cms breadcrumbs full path? -

ruby on rails - npm error: tunneling socket could not be established, cause=connect ETIMEDOUT -