Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-09-2009, 15:35   #1
alessia86
Member
 
Iscritto dal: Dec 2008
Messaggi: 125
[JAVA] Aiuto sui thread e grafica

Salve a tutti..non riesco a capire un problema..Sto facendo un videogioco..Ho usato frame e pannelli..ma qnd visualizzola grafica mi accade che tra un frame ed un altro ci sono delle interruzioni di circa 2 secondi..e dopo riappare la schermata...Non so se mi sono spiegata bene..Io ho pensato che siccome ho inserito alcuni thread..possano fare interferenza con il thread dell'awt...è possibile che se il problema è qst causano qst effetti??
Vi ringrazio !!!
alessia86 è offline   Rispondi citando il messaggio o parte di esso
Old 10-09-2009, 15:50   #2
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
ricorda che le modifiche su elementi "visible" devono essere iniettati nel contesto dell' EDT
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 10-09-2009, 16:15   #3
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Il sintomo è quello di un sovraccarico dell'EDT (il thread che si occupa di aggiornare l'aspetto dei componenti e quello che gli va dietro).

Se usi un IDE con un profiler, il profiler è in grado di dirti cosa sta succedendo durante quelle interruzioni.

Altrimenti controlla i metodi repaint e tutti quelli che sono invocati come conseguenza di un aggiornamento dell'aspetto di un componente.

Verifica che non ci siano delle istruzioni che causano il caricamento di risorse da disco fisso, delle interruzioni tipo sleep o wait e controlla che un metodo direttamente o indirettamente invocato da repaint non causi esso stesso un'invocazione di repaint.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 11-09-2009, 13:39   #4
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da alessia86 Guarda i messaggi
Salve a tutti..non riesco a capire un problema..Sto facendo un videogioco..Ho usato frame e pannelli..ma qnd visualizzola grafica mi accade che tra un frame ed un altro ci sono delle interruzioni di circa 2 secondi..e dopo riappare la schermata...Non so se mi sono spiegata bene..Io ho pensato che siccome ho inserito alcuni thread..possano fare interferenza con il thread dell'awt...è possibile che se il problema è qst causano qst effetti??
Vi ringrazio !!!
io ho avuto esperienze di pesanti rallentamenti di interfacce Swing quando (erroneamente) creavo i vari componenti in un thread diverso dall'EDT anziché usare SwingUtilities.invokeLater.

PS: per cortesia, evita l'SMSese
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 11-09-2009, 14:06   #5
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Controllerei i metodi indicati da PGI e anche tutti i metodi delle eventuali implentazioni di listener vari, che sono eseguiti dall'EDT (actionPerformed() di ActionListener, per esempio: se nel corpo di questo metodo hai inserito del codice per calcolare i primi 1000 numeri primi l'EDT resta impegnato per un po').
__________________

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 15-09-2009, 10:23   #6
alessia86
Member
 
Iscritto dal: Dec 2008
Messaggi: 125
In effetti mi da quegli errori perchè ho creato dei thread che fanno interferenza con l'edt..ho provato a renderli thread 'demoni' ..e addesso tutti quelle interferenze non si vedono più..Ma va bene usare thread demoni opuure è meglio usare SwingUtilities.invokeLater? (anche se la SwingUtilities non ho capito bene come funziona)...
alessia86 è offline   Rispondi citando il messaggio o parte di esso
Old 15-09-2009, 13:07   #7
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da alessia86 Guarda i messaggi
In effetti mi da quegli errori perchè ho creato dei thread che fanno interferenza con l'edt..ho provato a renderli thread 'demoni' ..e addesso tutti quelle interferenze non si vedono più..Ma va bene usare thread demoni opuure è meglio usare SwingUtilities.invokeLater? (anche se la SwingUtilities non ho capito bene come funziona)...
Io non ho capito cosa fanno i thread che hai creato tu: mutano lo stato dei componenti grafici?

Se sì, allora tutte quelle operazioni che toccano direttamente componenti grafici visualizzabili vanno accodate nella AWT Event Queue in modo che sia l'EDT a processarle (come da architettura a thread singolo di AWT/Swing).
Per accodare delle operazioni nella event queue basta "impacchettarle" in un Runnable che passerai come argomento al metodo statico invokeLater() di SwingUtilities.

Come ti dicevo sopra, anche il codice che tu inserisci nel corpo dei metodi dei vari Listener (actionPerformed() per ActionListener e mousePressed(), mouseReleased(), mouseClicked(), di Mouselistener e mouseMoved(), mouseDragged() di MouseMotionListener(), tanto per citare i soiliti) viene processato dall'EDT, quindi, in questi casi, dovresti assicurarti di non far compiere computazioni che si protraggono "troppo" nel tempo, perchè finchè EDT è impegnato a processarle non può fare altro (ad esempio aggiornare la grafica dei componenti).
__________________

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 : 15-09-2009 alle 13:13.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 15-09-2009, 13:15   #8
alessia86
Member
 
Iscritto dal: Dec 2008
Messaggi: 125
Alcuni thread si..mentre altri no..Qst altri allora li devo fare demoni..in modo tale che la JVM termini ugualmente?
alessia86 è offline   Rispondi citando il messaggio o parte di esso
Old 15-09-2009, 13:26   #9
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da alessia86 Guarda i messaggi
Alcuni thread si..mentre altri no..Qst altri allora li devo fare demoni..in modo tale che la JVM termini ugualmente?
Dunque.. dove dici "alcuni thread sì": sono quelli che toccano la grafica?
Allora questi vanno accodati con invokeLater().

Dove dici: "mentre altri no"... dunque questi thread invece eseguono altre computazioni.
Questi non vanno accodati nell'EDT ma, se la grafica va poi aggiornata con una logica che dipende dal risultato di queste computazioni, bisogna in qualche modo sincronizzare le cose.

Sul fatto di renderli demoni o meno non saprei aiutarti, dato che fin'ora non mi è mai capitato di utilizzare thread impostati come "deamon" e non so usarli.

Ma mi pare di capire che tu li hai resi deamon più come un tentativo stile "ultima spiaggia" che a ragion veduta. Percui bisognerebbe sapere di più circa le operazioni logiche che devi eseguire e da cui eventualmente l'aggiornamento della grafica dipende.

Già sapere quali thread toccano la grafica e quali no è stato un primo passo. Potresti provare a descriverci cosa fanno i singoli thread? Questo sarebbe utile per capire più in dettaglio lo scenario in cui ti trovi.
__________________

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 18-09-2009, 10:10   #10
alessia86
Member
 
Iscritto dal: Dec 2008
Messaggi: 125
Alcuni thread invocano un metodo che si trova all'interno del pannello della grafica e qst metodo inoca un repaint..Qiundi qst thread vanno accodati con invokeLater(),giusto?

Poi ho un thread il cui compito è di rendere visibile un determinato pannello per un tot di tempo..ed invocano semplicemente setVisible(false) e setVisible(true)..
alessia86 è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2009, 10:27   #11
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da alessia86 Guarda i messaggi
Poi ho un thread il cui compito è di rendere visibile un determinato pannello per un tot di tempo..ed invocano semplicemente setVisible(false) e setVisible(true)..
Questo thread deve accodare sulla Event Queue solo l'invocazione del metodo setVisible() del tuo pannello.

Quote:
Alcuni thread invocano un metodo che si trova all'interno del pannello della grafica e qst metodo inoca un repaint..Qiundi qst thread vanno accodati con invokeLater(),giusto?
No, in realtà non occorre, perchè esistono alcuni metodi che si possono invocare da qualsiasi thread.
Il metodo repaint() di JComponet (quind ereditato da JPanel) è uno di questi.

Se vuoi approfondire questi aspetti, o solo avere dei rapidi riferimenti sottomano per casi futuri, eccoti un buon link.
__________________

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 18-09-2009, 16:45   #12
alessia86
Member
 
Iscritto dal: Dec 2008
Messaggi: 125
Scusa se ti disturbo ancora..Ho accodato solo setVisible() nell'EventQueue..ma succede che mi visualizza lo sfondo di colore scuro del pannello ma non appare l'immagine che ho disegnato con paintComponent nel pannello..

Ora vorrei capire perchè cosi' non funziona mentre se uso un thread diverso il pannello viene visualizzato correttamente..
alessia86 è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2009, 17:07   #13
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da alessia86 Guarda i messaggi
Scusa se ti disturbo ancora..Ho accodato solo setVisible() nell'EventQueue..ma succede che mi visualizza lo sfondo di colore scuro del pannello ma non appare l'immagine che ho disegnato con paintComponent nel pannello..

Ora vorrei capire perchè cosi' non funziona mentre se uso un thread diverso il pannello viene visualizzato correttamente..
Nella event queue, assieme al setVisible(true) accoda un repaint().
Se continui a non ottenere ciò che desideri prova a postaci il codice del thread e del pannello, che gli diamo un'occhiata.
__________________

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 19-09-2009, 09:08   #14
alessia86
Member
 
Iscritto dal: Dec 2008
Messaggi: 125
Ho accodato anche il repaint() e ci siamo..addesso ho l'effetto che desidero..Vorrei solo capire un ultima cosa..in pratica dopo qst pannello che appare per un tot di tempo..devo far visualizzare un altro pannello..

Ma dopo aver fatto :
Codice:
new Thread(new VisPannello()).start(); //VisPannello è il thread runnable dove accodo il setVisible() del pannello che voglio visualizzare per un tot di tempo
se dopo di qst chiamata metto:

Codice:

PannelloG pg=new PannelloG();  
F.add(pg);
pg.setVisible(true);
PannelloG è l'altro pannello che voglio far visualizzare dopo il precedente..
In qst modo però ottengo che appare direttamente pannelloG senza che il primo pannello..
Come posso fare per ovviare il problema?
Grazie !!!
alessia86 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Bentornati nel 2007: le memorie DDR3 rin...
Stellantis aderisce ad AI4I e Fondazione...
Google Pixel 10a: prime conferme sul pre...
ISRO potrebbe lanciare la capsula Gagany...
Un nuovo leak conferma dimensioni e novi...
Steam Machine: requisiti Verified piu' s...
NVIDIA GeForce RTX 5070 Ti fuori produzi...
Sony ha annunciato i nuovi giochi che en...
IBM Sovereign Core: la sovranità ...
Cerchi un'asciugatrice conveniente su Am...
Ayaneo Pocket Play arriverà in ri...
iPad Pro 11'' con chip M4 scende a 949€ ...
The Sims entra in una nuova era, ma l'ac...
Netflix, Disney o Prime Video: qual &egr...
Perplexity blocca la generazione di imma...
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: 23:24.


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