Ciao a tutti.
ho un applicazione la cui GUI è una classica interfaccia grafica con le swing di JAVA.
Per un processo di passaggio graduale verso JSP mi trovo a dover effettuare delle modifiche all'applicazione di base in modo tale che possa passare "dalle swing" alle "pagine jsp" in qualsiasi momento. La mia idea per realizzare questa interoperibilità dei due livelli paralleli di presentation-tier sarebbe di sfruttare un pò i thread e xml. Poi magari esiste qualche idea più semplice ma al momento mi trovo in una fase di stallo, in quanto ho un bel pò di confusione in testa![]()
Mi spiego con un esempio:
Mi trovo su programmaSWING, clicco su un Jbutton e si apre programmaJSP con form per inserimento dati di un anagrafica estesa.
Compilo i campi e faccio il submit (scriverò quindi un xml o un txt con i dati), chiudo la pagina e il flusso ritorna sul programmaSWING che leggendo l'xml opportunamente trasformato in un bean compilerà un anagrafica parziale (nome e cognome per esempio) sull'interfaccia di programmaSWING.
Attualmente sto procedendo con questa logica ma ogni soluzione/alternativa è ben accetta.
La parte di scrittura del file funziona, in quanto ho già testato separatamente i due ambienti e funzionano alla perfezione
Quello che mi "manca" e il ritorno sulla parte "SWING" in quanto al submit della JSP "resto sempre in attesa" come se il controllo fosse già passato alla swing prima ancora di scrivere il file e chiudere la pagina.
Spero riusciate ad aiutarmi e di essere stato "un pò" chiaro.
GRAZIE in anticipo!
Di seguito un pò di codice:
nel mio actionPerformed ho:
codice:.... ..... else if (e.getActionCommand().equals("New")) { avviaProgrammaJSP(); Runnable r2 = new Runnable() { public void run() { try { while (true) { checkFile(); Thread.sleep(2000L); } } catch (InterruptedException iex) { } } }; Thread thr2 = new Thread(r2); thr2.start(); // } .....
Di seguito i metodi/classi coinvolti:
avviaProgrammaJSP():
codice:private void avviaProgrammaJSP() { try { Process process = Runtime.getRuntime().exec( new String[] { (String) "cmd.exe", "/c", "start", "\"\"", '"' + "http://localhost:8888/applicazioneJSP/" + '"' }); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
checkFile():
codice:private void checkFile() { String fileUtente = path +"/applicazioneJSP/users.txt"; waitForFile wff = new waitForFile(new File(fileUtente)); try { boolean exists = wff.waitUntilExists(10000); // 8 secondi di timeout if (exists) { readTextFile(fileUtente); } else JOptionPane.showMessageDialog(IMantainer.getFrame(), "FILE NON E' STATO CREATO!"); } catch (Exception e) { System.out.println(e); } }
classe waitForFile :
codice:public class waitForFile { private File f; public waitForFile(File f) { this.f = f; } public boolean waitUntilExists(long timeout) throws InterruptedException { final Object monitor = new Object(); synchronized (monitor) { Runnable r = new Runnable() { public void run() { try { while (true) { if (f.exists()) break; Thread.sleep(50); } } catch (InterruptedException e) { } synchronized (monitor) { monitor.notify(); } } }; Thread t = new Thread(r); t.setName("MercurioJSP"); t.start(); try { monitor.wait(timeout); } finally { t.interrupt(); } } return f.exists(); } }

Rispondi quotando