Torna indietro   Hardware Upgrade Forum > Software > Programmazione

BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX ha portato sul mercato Picco, un e-reader da 3,97 pollici che pesa 58 grammi e si aggancia al retro dello smartphone con un anello magnetico. Lo abbiamo usato con Pixel 11 Pro XL e iPhone 18 Pro per capire se un formato così ridotto regga la prova della lettura quotidiana
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
A Las Vegas AMD ha svelato i dettagli architetturali delle CPU EPYC di sesta generazione, note con il nome in codice Venice. Nuovi core Zen 6 e Zen 6c costruiti a 2 nanometri, fino a 256 core per socket, 16 canali di memoria, interfaccia PCI Express 6.0 e un'intera famiglia di proposte che va da Venice SP7 a Verano. Senza dimenticare la memoria, oggi la voce di costo più pesante in un server: AMD risponde con CXL 3.1 e con la tecnologia software MEXT, che porta la memoria flash dentro la gerarchia della DRAM.
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max mette un pannello IPS da 13 pollici con risoluzione 2,5K e refresh a 120 Hz davanti a una batteria da 10.100 mAh e a quattro altoparlanti. Il listino parte da 399,90 euro, per un progetto molto chiaro e ambizioso: schermo ampio, buon audio e giornate lontano dalla presa, a un prezzo che non pesa sul portafoglio
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


BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone BOOX Picco: l'ebook reader minuscolo è un...
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria AMD EPYC Venice: dentro Zen 6, i SoC a 256 core ...
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro HONOR Pad X9 Max recensione, schermo ultra large...
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro Jabra Evolve3 85: le cuffie sia per l'intratteni...
Blender 5.3 importa le scene Gaussian Sp...
La NASA pensa ancora ai campioni di Mars...
Nintendo intervisterà i suoi veterani pe...
Altro che GTA 6, finalmente potete gioca...
Il trucco delle app che ti tengono incol...
Elon Musk anticipa le caratteristiche de...
Caos Grok Build: le app create con l'IA ...
ChatGPT abbandona le vecchie modalità vo...
Claude adatta un modello alle GPU AMD in...
Stangata alla pirateria da Nintendo: col...
Cisco potenzia AI Defense: arriva l'inte...
Basta cambiare pasta termica: la nuova i...
Aura Ink 10: la cornice E-Ink si rifà il...
Auto cinesi bandite dalle caserme tedesc...
Addio criogenia: il prototipo di compute...
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: 14:40.


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