2016-07-21 8 views
0

Ich erstelle eine Anwendung in Java, die einige Informationen aus einer MySQL-Datenbank abruft und sie dann in einer JTable auf dem Bildschirm anzeigt.Result Set wird nicht immer in der JTable angezeigt

Der Code, den ich verwende, um die Informationen in ein DefaultListModel <> zu bekommen und zu setzen, wird unten gezeigt. Das DefaultListModel <> wird dann der JTable zugeführt, die die Informationen auf dem Bildschirm anzeigt.

Das Problem, das ich habe, ist, dass manchmal die Informationen auf dem Bildschirm angezeigt werden und manchmal ist es nicht. Da es keine Änderung in der verwendeten Abfrage gibt, gehe ich davon aus, dass es etwas mit der MySQL-Verbindung zu tun hat.

Die JTable und MenuOptions sind Setup wie dieses

menuOptions = new DefaultListModel<>(); 
menuOptions.addElement(""); 

menuList = new JList<>(menuOptions); 
menuList.setFont(new Font("Myriad Hebrew", Font.PLAIN, 32)); 
menuList.setBackground(Color.decode("#005952")); 
menuList.setForeground(Color.decode("#BEC423")); 
menuList.setSelectionBackground(Color.decode("#660033")); 
menuList.setSelectionForeground(Color.decode("#FFFFFF")); 

So ist die Frage, die ich frage mich, wie kann ich sicherstellen, dass die Informationen immer auf dem Bildschirm angezeigt wird. Ein Bild davon, wann es angezeigt wird und nicht angezeigt wird, wird unten angezeigt.

Angezeigt:

Displayed

nicht angezeigt:

Not Displayed

Ein letzter Punkt die Informationen zu erhalten, zu zeigen, dass ich auf Wieder Ausführung des Codes zu halten, bis es schließlich gezeigt.

Jede Hilfe wird sehr geschätzt.

+2

1. alles innerhalb 'doInBackground()' ist außerhalb von 'EDT', Sie müssen die GUI in' publish() '--->' process() ',' setProcess() 'oder' done() benachrichtigen ', 2.' JTable'! = 'DefaultListModel' 3. um' DefaultListModel' zurückzusetzen, führe 'SwingWorker' aus, wobei 'publish() ---> process()', 'setProcess()' oder 'done() 'um' 'DefaultListModel'', ein neues' Item' hinzuzufügen, nichts esle (klar für mich) zu Ihrem Code oder Beschreibung – mKorbel

+0

@mKorbel 1) Für den Rest der Anwendung haben Änderungen an der GUI von 'doInBackground()' funktioniert. 2) Ich weiß, dass 'DefaultListMenu' die' JTable' mit den Informationen versorgt. Wenn das Problem liegt, weil ich den Code in der 'doInBackground()' Funktion ändern, dann bin ich verwirrt, warum es manchmal funktioniert und manchmal nicht. – thomasjcf21

+1

Es kann manchmal funktionieren, aber es ist nicht zuverlässig; mehr [hier] (http://stackoverflow.com/a/7158505/230513) und [hier] (http://stackoverflow.com/a/38499763/230513). – trashgod

Antwort

0

@trashgod @mKorbel

Vielen Dank für die Hilfe Jungs, habe ich, indem Sie die Informationen in der Tabelle aus der getan() Funktion das Problem gelöst. Der Code ist unter

SwingWorker<Void, Void> worker = new SwingWorker< Void, Void>() { 

     String[] billItems = null; 

     @Override 
     public Void doInBackground() { 

      String SQL = "SELECT * FROM AddABill"; 

      try { 
       Statement stmt = GlobalVars.conn.createStatement(); 

       ResultSet rs = stmt.executeQuery(SQL); 

       //Set The Cursor To Last Position 
       rs.last(); 

       int totalRows = rs.getRow(); 

       billItems = new String[totalRows]; 

       //Set The Cursor Back To The Start 
       rs.beforeFirst(); 

       while(rs.next()){ 
        int rowNum = rs.getRow() - 1; 
        billItems[rowNum] = rs.getString(1) + " - " + rs.getString(2); 
       } 

       rs.close(); 
       stmt.close(); 
      } 

      catch (SQLException e) { 
       System.out.println("An Error Was Detected! :/"); 
      } 

      return null; 
     } 

     @Override 
     public void done(){ 
      menuOptions.clear(); 

      for(int i = 0; i < billItems.length; i++){ 
       menuOptions.addElement(billItems[i]); 
      } 

      loadingGif.setVisible(false); 
     } 

    }; 

Danke,

Thomas.

Verwandte Themen