Ordeal’s Movie Manager RCP(Part3)

Come promesso vediamo il metodo FilmListView.printResult

	@SuppressWarnings("deprecation")
	public static void printResult(ResultSet r, Display display)
	{
		table.removeAll();
		if(secThread!=null)
			secThread.stop();
		 secThread=new PrintResult(r,display,table,nextItem);
		 secThread.start();

	     titoloCol.pack();
	     annoCol.pack();
	      numdvdCol.pack();
	      divxCol.pack();
	      vistoCol.pack();
	      registaCol.pack();
	      movieidCol.pack();
	}

In realtà il metodo in se serve solo ad avviare un thread della classe PrintResult, con due particolari accorgimenti:

  1. resettare il contenuto precedentemente visualizzato nella table con
    table.removeAll(); 
  2. stoppare un thread avviato precedentemente se è ancora in runtime, cioè se sta ancora stampando sulla table, con
    secThread.stop();

Esaminiamo dunque il codice del thread di stampa.

class PrintResult extends Thread {
	  private Display display;
	  private ResultSet r;
	  private Table table;
	  private TableItem nextItem;

	  String text="";

	  public PrintResult(ResultSet rs,Display d,Table t,TableItem ni)
	  {
		  display=d;
		  nextItem=ni;
		  r=rs;
		  table=t;
	  }

	  public void run()
	  {  

				try {
					while(r.next())
					{

							display.syncExec(new Runnable() {
								public void run() {
									try
									{
									nextItem = new TableItem(table, SWT.WRAP);
									nextItem.setText(0,r.getString("titolo"));
								     nextItem.setText(1,r.getString("anno"));
								     nextItem.setText(2,r.getString("numdvd"));
								     nextItem.setText(3,r.getString("divx"));
								     nextItem.setText(4,r.getString("giavisto"));
								     nextItem.setText(5,r.getString("regista"));
								     nextItem.setText(6,r.getString("movie_id"));
									}
									 catch (SQLException e) {
											// TODO Auto-generated catch block
											e.printStackTrace();
										}

								}//inner run

						} //runnable

					  );//
					}
					r.getStatement().getConnection().close();

				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}//while

	  }//run
}//thread

Il meccanismo usato nel ciclo while, è lo stesso di cui parlavo qui
Il metodo run() dell’interfaccia Runnable() che stiamo implementando è invocato direttamente dal thread grafico, e poichè scomodiamo quest’ultimo con la chiamata

display.syncExec(Runnable)

il thread secondario verrà sospeso fin quando il thread grafico non completerà la stampa di una riga.

Il membro “r” della classe, di tipo ResultSet, come dice il nome stesso contiene una struttura che alloca in qualche modo le stringhe di risultato della query al server.
Il ciclo ha la sua condizione d’arresto quando r.next() è falso, cioè quando sono terminate le righe estratte una per una dal ResultSet.

Per darvi un’idea del contenuto grafico del Tab “Search by Title”, eccovi una screenshot:

—-
Link ai binari/sorgenti
Win32 e per GNU/Linux@x86.

Vi ricordo che i sorgenti si trovano sotto la directory plugins,all’interno del MyMovieManager_1.0.0.jar, dentro la directory src.

Una Risposta a “Ordeal’s Movie Manager RCP(Part3)”

  1. Sergio Dice:

    Compà si troppu fuorti! Ma perchè non gli dici di considerare questa come tesi?

Lascia un commento