Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Abbiamo provato per una settimana intera la Can-Am Origin, la Dual Sport elettrica del gruppo canadese BRP: ecco com'è andata tra città, autostrada e un primo assaggio di sterrato
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Nelle ultime settimane abbiamo provato il mouse Logitech G305, la tastiera G316 X 98 e le cuffie G325. Si tratta del setup entry-level di Logitech che ormai, di "entry-level" ha ben poco. Tastiera e mouse offrono prestazioni di livello competitivo con quasi nessuna rinuncia e un livello di personalizzazione estremamente elevato. Le cuffie, invece, hanno mostrato qualche debolezza, ma propongono un ventaglio di funzionalità completo che consente di abbandonare completamente i cavi
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
POCO F9 Pro arriva sul mercato con l'obiettivo di portare prestazioni da smartphone top di gamma in una fascia di prezzo "più aggressiva", senza rinunciare a un comparto fotografico finalmente all'altezza. Dopo averlo testato sul campo, emerge uno smartphone molto più completo rispetto alla generazione precedente, ma anche con alcuni piccoli compromessi che diventano difficili da ignorare quando il prezzo di listino sfiora i 1.000 euro.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-09-2009, 14: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, 14: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, 15: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, 12: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, 13: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, 09: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, 12: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 12:13.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 15-09-2009, 12: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, 12: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, 09: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, 09: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, 15: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, 16: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, 08: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


Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco Logitech G325, G305 e G316 X: il tris per chi no...
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6 Qualcomm annuncia la nuova generazione di SoC Sn...
Il satellite LINK è rientrato nel...
L'ESA risponde alle critiche di Jared Is...
La NASA annuncia il nuovo telescopio spa...
HONOR pubblica The Sea Between Us, un co...
L'Olanda punta su NixOS e open source pe...
OPPO Find X10 Pro Max, il flagship con t...
Gli smartphone Samsung potrebbero avere ...
GeForce Now arriverà sui Googlebo...
Opus 5.5 e GPT-6 Sol nello stesso pomeri...
Weekend Amazon, le prime 5 offerte sono ...
Mini Compressore a 21,84€: gonfia le gom...
Gemini si aggiorna, ora può conne...
Da 32 a 65 pollici: ecco le TV più...
Xiaomi Redmi Note 17 a 269€: ecco perch&...
ASUS avverte i clienti: accesso non auto...
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: 00:05.


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