Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Renault Twingo E-Tech Electric: che prezzo!
Renault Twingo E-Tech Electric: che prezzo!
Renault annuncia la nuova vettura compatta del segmento A, che strizza l'occhio alla tradizione del modello abbinandovi una motorizzazione completamente elettrica e caratteristiche ideali per i tragitti urbani. Renault Twingo E-Tech Electric punta su abitabilità, per una lunghezza di meno di 3,8 metri, abbinata a un prezzo di lancio senza incentivi di 20.000€
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Nel Formula 1 Technology and Media Centre di Biggin Hill, la velocità delle monoposto si trasforma in dati, immagini e decisioni in tempo reale grazie all’infrastruttura Lenovo che gestisce centinaia di terabyte ogni weekend di gara e collega 820 milioni di spettatori nel mondo
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
Il nuovo gimbal mobile DJI evolve il concetto di tracciamento automatico con tre modalità diverse, un modulo multifunzionale con illuminazione integrata e controlli gestuali avanzati. Nel gimbal è anche presente un'asta telescopica da 215 mm con treppiede integrato, per un prodotto completo per content creator di ogni livello
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-10-2010, 11:43   #1
Emaborsa
Senior Member
 
L'Avatar di Emaborsa
 
Iscritto dal: Sep 2004
Città: Bolzano
Messaggi: 2160
[JAVA] Aiuto per GUI & Threads

Come progettino universitario dobbiamo scrivere una mini chat che comprende server+cleint. In 3 classi ho scritto tutto, abbastanza semplice. Funziona perfettamente sotto Terminal. Ieri volevo iniziare a creare la veste grafica. La mia idea era di Creare una GUI iniziale con la presentazione del progetto e con 2 bottoni, per poter O avviare il server O avviare un cleint. Ho usato Swing ma ammetto che non sono molto pratico a fare GUI. Comunque sia, GUI iniziale fatta, semplice ma per il progetto basta (Appena riesco vi fosto lo screen). I bottoni ovviamente hanno un actionlistener. Ora cliccando per esempio sul bottono Server, vorrei fare aprire un'altra Finestra e chiudere quella precedente. Come faccio? Riesco a farne aprire una nuova, ma l'altra come faccio a chiuderla? Posso mettere un setvisible(false)? ...non mi sembra la soluzione migliore.

Arriviamo ad un altro problema. Ho crato anche la GUI per il server. poca roba, giusto 2 bottoni per avviarlo e fermarlo e qualche textarea. Nel bottone start ovviamente c'è il comando per creare un oggetto del mio server ed avviarlo. Nell'avvio c'è un loop infinito per riconoscere i vari client in entrata e servirli. Per via di questo loop mi si blocca la gui, perchè il comando che avvia il loop non termina. Come faccio? Uso i Thread? Se SI, come?
__________________
Vendo...nulla.
Cerco...la felicità
.
Emaborsa è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2010, 12:29   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Emaborsa Guarda i messaggi
I bottoni ovviamente hanno un actionlistener. Ora cliccando per esempio sul bottono Server, vorrei fare aprire un'altra Finestra e chiudere quella precedente. Come faccio? Riesco a farne aprire una nuova, ma l'altra come faccio a chiuderla? Posso mettere un setvisible(false)? ...non mi sembra la soluzione migliore.
Supponiamo che
1) hai ilriferimento al JFrame da chiudere ('frame' nell'esempio);
2) il JFrame da chiudere ha la sua defaultCloseOperation settata a DISPOSE_ON_CLOSE;
Puoi fare così:
Codice:
...
// nell'actionPerformed del listener associato al JButton "Server"
WindowEvent closing = new WindowEvent(frame, WindowEvent.WINDOW_CLOSING);
frame.dispatchEvent(closing);
...
Quote:
Originariamente inviato da Emaborsa Guarda i messaggi
Arriviamo ad un altro problema. Ho crato anche la GUI per il server. poca roba, giusto 2 bottoni per avviarlo e fermarlo e qualche textarea. Nel bottone start ovviamente c'è il comando per creare un oggetto del mio server ed avviarlo. Nell'avvio c'è un loop infinito per riconoscere i vari client in entrata e servirli. Per via di questo loop mi si blocca la gui, perchè il comando che avvia il loop non termina. Come faccio? Uso i Thread? Se SI, come?
La GUI si blocca perchè il codice del tuo loop viene eseguito dall'EDT.
La soluzione è creare e lanciare un nuovo Thread a cui far eseguire il tuo loop.
Trovi degli spunti in questa discussione.
Visto che lavori con Swing può esserti utile il tutorial che ho in firma.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2010, 17:31   #3
Emaborsa
Senior Member
 
L'Avatar di Emaborsa
 
Iscritto dal: Sep 2004
Città: Bolzano
Messaggi: 2160
Grazie della risposta, ma mi sa che devo fare ancor amolta pratica. Il fatto che devo usare i Threads lo immaginavo, altrimenti è normale che mi se blocca.
Il punto è che ci ho pure provato, ma non sono risucito a mettere assieme il tutto che funzioni a dovere. Come detto sopra, non sono pratico a fare GUI...perciò nemmeno di Swing. Visto che lo hai accennato, che alternative (migliori) avrei a swing?
__________________
Vendo...nulla.
Cerco...la felicità
.
Emaborsa è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2010, 17:50   #4
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Emaborsa Guarda i messaggi
Il punto è che ci ho pure provato, ma non sono risucito a mettere assieme il tutto che funzioni a dovere. Come detto sopra, non sono pratico a fare GUI...perciò nemmeno di Swing. Visto che lo hai accennato, che alternative (migliori) avrei a swing?
Non lo so: conosco bene solo Swing. SWT lo conosco pochissimo, ma da quel poco che so anche la sua architettura è a single-thread (quindi dovresti comunque affrontare gli stessi "problemi" che stai affrontando ora in Swing).
Se per "alternative migliori" intendi una libreria/framework la cui architettura supporti il multithreading in modo trasparente all'utente-programmatore, non ne conosco.
L'architettura basata sul modello "single-thread" per i GUI framework fin'ora si è imposta come la preferenziale per un tot di ragioni.

In ogni caso, la morale della favola è che scrivendo applicazioni basate su interfaccia grafica prima o poi sbatti contro queste questioni, e in un modo o nell'altro le devi studiare e imparare per poterle controllare e gestire. Non c'è scampo (l'opzione è rinunciare alla GUI).

Se vuoi un consiglio, fossi in te inizierei proprio dal tutorial che ho in firma: in 3 orette lo leggi tutto con una certa calma, in modo da riuscire a "digerire" mentalmente tutti i concetti, fossero anche tutti nuovi per te.
In particolare, la faccenda dell'EDT e dei thread, è trattata proprio nelle prime pagine (e giustamente direi: non ha senso studiare Swing senza questa premessa fondamentale).

Poi puoi leggerti questo per approfondire il threading model in Swing.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 27-10-2010 alle 18:00.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2010, 20:40   #5
Emaborsa
Senior Member
 
L'Avatar di Emaborsa
 
Iscritto dal: Sep 2004
Città: Bolzano
Messaggi: 2160
Appena riesco. magari il fine settimana mi studierò per bene lo swing.
Tornando al mio "progetto", se faccio some mi hai scritto in pratica premo il bottone, viene chiuso il frame in questione e nel tasto devo avviarene un altro (un'altra classe che è o extends JFrame o implements Runnable)? ...ho capito bene?
Altra cosa: Che ne pensi degli editor come VISUAL EDITOR e affini?
__________________
Vendo...nulla.
Cerco...la felicità
.

Ultima modifica di Emaborsa : 27-10-2010 alle 21:35.
Emaborsa è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2010, 09:19   #6
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Emaborsa Guarda i messaggi
...
Tornando al mio "progetto", se faccio some mi hai scritto in pratica premo il bottone, viene chiuso il frame in questione e nel tasto devo avviarene un altro (un'altra classe che è o extends JFrame o implements Runnable)? ...ho capito bene?
Tieni presente che il metodo actionPerformed è eseguito dall'EDT.
Chiudi il frame che devi chiudere e apri il nuovo frame, se devi aprirne uno nuovo.
La faccenda del Runnable da lanciare in un altro Thread è necessaria qualora quel Runnable incapsuli computazioni da lanciare alla pressione del bottone e che non si vogliono/devono far eseguire all'EDT.

Dunque la situazione è questa:
1 - chiudere una finestra
2 - aprire un'altra finestra
3 - eseguire delle computazioni che non devono impegnare l'EDT

Il thread che processa questa "lista della spesa" è l'EDT
Resta da chiarire se il punto 3) deve essere eseguito in sincrono con il termine dell'esecuzione del punto 2) oppure se questi due punti sono asincroni tra loro.

Se lo scenario è il primo [eseguo 2) completamente e dopo eseguo 3)] si può lanciare un frame (punto 2)) il quale implementa un WindowListener che ascolta se stesso e risponde all'evento "Window Opened" eseguendo le operazioni previste al punto 3) che saranno incapsulate in un Runnable ed eseguite in un nuovo thread (perchè è sempre l'EDT che esegue i metodi dei listener).

Se lo scenario, invece, è il secondo [eseguo 2) e 3)] si può lanciare un frame (punto 2) e creare e avviare un nuovo Thread che esegue le operazioni previste al punto 3) che saranno incapsulate in un Runnable per il motivo che sappiamo.

Quote:
Originariamente inviato da Emaborsa Guarda i messaggi
...
Altra cosa: Che ne pensi degli editor come VISUAL EDITOR e affini?
Mai usato, dato che lavoro esclusivamente con NetBeans, dove c'è Matisse.
Penso che siano utili per prototipare rapidamente le GUI, ma non sollevino il programmatore da una solida conoscenza delle API (Swing, SWT o quant'altro): se questa manca è normale incappare in difficoltà e relative perdite di tempo, e queste ultime vanificano l'utilità dell'editor visuale che scrive il codice al posto nostro.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2010, 10:03   #7
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12862
Usa NetBeans... non capisco perché bisogna complicarsi la vita.

@banryu: se il disegnatore di interfacce è fatto come cristo comanda, e soprattutto se non è necessario un controllo granulare dell'intera interfaccia, non vedo perché complicarsi la vita.

Scrivere a mano tutto quanto è pura follia.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2010, 11:01   #8
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
@banryu: se il disegnatore di interfacce è fatto come cristo comanda, e soprattutto se non è necessario un controllo granulare dell'intera interfaccia, non vedo perché complicarsi la vita.
Ho solo espresso la mia opinione, frutto della mia singola limitata (lo sottolineo: singola e limitata) esperienza.
A scanso di equivoci non volevo dire (e se rileggi bene non lo dico ne lo sottointendo) che gli editor visuali per GUI sono delle ciofeche e non bisognerebbe usarli: dico solo che non dispensano il programmatore che li utilizza dalla conoscenza della API del framework per GUI che si sta utilizzando.
Osservazione piuttosto banale, d'accordo, ma è quello che io penso vada sempre tenuto ben presente.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2010, 15:18   #9
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12862
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Ho solo espresso la mia opinione
[..]
Anche io tranquillo , in effetti ho letto un po' troppo velocemente, quello che dici è pienamente condivisibile.

Comunque in ogni caso consiglio all'autore del thread di provare l'ottimo NetBeans, se già non lo usa.

Per il resto per non far bloccare la GUI dovrebbe essere sufficiente creare un thread separato (o sfruttare gli Executor che però ho usato pochissimo e non ricordo molto).
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2010, 15:43   #10
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
Anche io tranquillo , in effetti ho letto un po' troppo velocemente, quello che dici è pienamente condivisibile.

Comunque in ogni caso consiglio all'autore del thread di provare l'ottimo NetBeans, se già non lo usa.
Sì, anche io, se lavora con Swing.
C'è da tenere presente però, che se non ha mai visto NetBeans prima e al contrario è già produttivo con Eclipse il passaggio dall'uno all'altro implica il dover affrontare e superare (e quindi tempo) le classiche ed eventuali difficoltà dovute al doversi abituare a un nuovo ambiente di sviluppo.

Quote:
Originariamente inviato da WarDuck Guarda i messaggi
Per il resto per non far bloccare la GUI dovrebbe essere sufficiente creare un thread separato (o sfruttare gli Executor che però ho usato pochissimo e non ricordo molto)
Per lo stesso senso (tempo) sotteso nel mio commento al primo quote, qui sopra, ho preferito non suggerire ad Emaborsa l'uso di Executor (o ancora meglio SwingWorker); suppongo siano API non ancora patrimonio delle sue conoscenze.

Credo che per fare quello che deve, sia sufficiente sapere dell'architettura a thread singolo di Swing e dell'EDT, (di quando entra in gioco, del fatto di non fargli eseguire computazioni onerose e del fatto che bisogna fargli eseguire tutte le operazioni che mutano i componenti grafici) e conoscere l'uso della classe Thread, dell'interfaccia Runnable e dei metodi SwingUtilities.invokeLater e SwingUtilities.invokeAndWait.

Queste sono (assieme al memory model del linguaggio), secondo me, le conoscenze basilari indispensabili per gestire senza paura questioni non troppo complesse di multithreading in Swing.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2010, 18:25   #11
Emaborsa
Senior Member
 
L'Avatar di Emaborsa
 
Iscritto dal: Sep 2004
Città: Bolzano
Messaggi: 2160
Grazie ad entrambi.
Allora, diciamo che sono abbastanza nuovo nella programmazione, sono al secondo anno di università, e prima di allora non avevo mai programmato.
Stiamo facendo progettini, piano piano si scoprono cose nuove...
La prima volta che ho dovuto fare una GUI non sapevo da che parte iniziare allora ho rubato pezzi di codice per mettere insieme qualcosa e da li ho capico qualcosina....che però è troppo poco. Altri hanno usato Visual Editor per Eclipse, che però sull'ultimo Eclipse non va (non hanno ancora fatto la versione nuova). Poi ho trovato quello di Google che secondo me è già meglio.
Ho provato ad usare anche Netbeans, ma il punto è che ne so troppo poco di swing, e perciò ho deciso di seguire un tutorial che mi mostri il tutto. Vorrei arrivare a farmi una GUI a mano senza editor, ovviamente parlo di GUI semplici. Se devo fare una gui complessa di sicuro andrei di editor.
__________________
Vendo...nulla.
Cerco...la felicità
.
Emaborsa è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2010, 19:05   #12
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Emaborsa Guarda i messaggi
[...]
ma il punto è che ne so troppo poco di swing, e perciò ho deciso di seguire un tutorial che mi mostri il tutto. Vorrei arrivare a farmi una GUI a mano senza editor, ovviamente parlo di GUI semplici. Se devo fare una gui complessa di sicuro andrei di editor.
Bingo!
Segui il tutorial che ho in firma, è eccellente per chi parte da zero

Una volta assorbito, continua con il tuo progetto e ogni volta che incontri un problema circa la GUI (devi usare un componente che non hai mai usato prima, devi rispondere a eventi generati dai componenti della GUI che ancora non conosci, ecc...) vai a questa "lesson":
- Lesson: Using Swing Components
e consulta la sezione "HowTo" relativa allo specifico componente che ti interessa.

Quella lesson fa parte della più ampia "trail" su Swing:
- Trail: Creating a GUI With JFC/Swing (nota che c'è un tutorial proprio sul threading in Swing)

Che a sua volta è una macro-sezione dell'immenso "The Really Big Index":
- The Really Big Index (The Java Tutorials)

Tienti queste risorse sempre sottomano e impara a consultarle con destrezza: assieme ai javadoc delle classi del JDK forniscono un'ottima documentazione.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 28-10-2010 alle 19:15.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce Recensione Pura 80 Pro: HUAWEI torna a stupire c...
Opera Neon: il browser AI agentico di nuova generazione Opera Neon: il browser AI agentico di nuova gene...
Apple disattiverà la sincronizzaz...
Google lancia l'allarme: attenzione ai m...
Primo test drive con Leapmotor B10: le c...
'Non può essere un robot': l'uman...
Monopattino elettrico Segway Ninebot Max...
Syberia Remastered è disponibile:...
Sony scopre che tutti i modelli AI hanno...
Amazon nasconde un -15% su 'Seconda Mano...
Due occasioni Apple su Amazon: iPhone 16...
Verso la fine della TV tradizionale? I g...
Cassa JBL a 39€, portatili, smartphone, ...
Cometa interstellare 3I/ATLAS: la sonda ...
Jensen Huang e Bill Dally di NVIDIA prem...
Il futuro della birra è green: H...
ECOVACS GOAT G1-2000: il robot tagliaerb...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:51.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v