|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
[Java] Due domande completamente scorrelate
aaaaaaaaaaaaaaaaaaaaaaaaaaaa
lora ![]() 1) qual è la maniera più semplice di ottenere i dati (in modo completamente raw) che un server web mi restituisce quando gli chiedo un URL? ad esempio, gli chiedo la home di Google e voglio ottenere il codice HTML. devo aprire una HttpURLConnection? che debbo farci? praticamente ho solo bisogno di una classe che da un URL mi faccia automaticamente una richiesta HTTP sintatticamente corretta e della risposta del server mi restituisca i dati togliendoci gli headers. 2) in una finestra devo disegnare un grafico; ho exteso la classe Canvas derivando una mia classe nella quale ho sovrascritto i metodi paint e update. in questo grafico devono essere disegnati vari elementi: prima uno sfondo che occupa tutta l'area, e poi sopra di esso varie altre cose. c'è modo di far si' che il tutto sia double-buffered senza che mi tenga io il mio buffer? attualmente utilizzo una BufferedImage sulla quale disegno da dentro il metodo paint, e solo dopo che ho disegnato tutto chiamo il metodo drawImage del Graphics che mi arriva come parametro di paint. c'è modo di ottenere lo stesso risultato eliminando la BufferedImage intermedia? |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Per il 2) non ti saprei dire adesso, dovrei documentarmi.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#3 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
ah, andbin... un vero toccasana per la mia pigrizia nel cercare informazioni nella documentazione Java
![]() grazie mille intanto per la prima ![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Usa JPanel al posto di Canvas, scrivi il codice che disegna il grafico nel metodo paintComponent anzichè in paint e, se vuoi, invoca setDoubleBuffered(true) sul JPanel (ma i componenti Swing dovrebbero già essere DoubleBuffered).
Altrimenti con Canvas hai la possibilità di disegnare tramite il suo BufferStrategy (che ti permette di gestire il numero di buffer) ma, in questo caso, devi creare un ciclo di rendering autonomo da quello dell'EDT.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#5 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Il caso d'uso tipico somiglia a questo:
Codice:
while(true) { BufferStrategy bs = canvas.getBufferStrategy(); //un kilo e due di while, vedi documentazione Graphics2D g = (Graphics2D)bs.getDrawGraphics(); //disegni su g, come faresti nel paint bs.show(); } Codice:
while(true) { Collection<OperazioneDisegno> ops = drainPipe(); BufferStrategy bs = canvas.getBufferStrategy(); Graphics2D g = (Graphics2D)bs.getDrawGraphics(); //eccetera for(OperazioneDisegno op : ops) op.draw(g); bs.show(); } Codice:
public void pushOp(OperazioneDisegno op) { pipe.push(op); } Codice:
public Collection<OperazioneDisegno> drainPipe() { return pipe.drain(); } Se il disegno complessivo è stateful (cioè una mutazione dell'immagine deve avvenire solo in conseguenza di una certa mutazione di stato) allora puoi modificare il metodo drainPipe in modo tale che esso restituisca il "drain" precedente fintantochè non sia rilevata la mutazione dello stato di interesse: Codice:
private boolean flushPipe; public synchronized void flush() { flushPipe = true; } public synchronized Collection<OperazioniDisegno> drainPipe() { if(flushPipe) { flushPipe = false; currentDrain = pipe.drain(); } return currentDrain; }
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#7 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
chiarissimo grazie! in effetti è decisamente meglio usare un JPanel: inutile complicarsi la vita a dover gestire un altro thread (come se già ne avessi pochi poi... ^^' ). grazie ancora.
|
![]() |
![]() |
![]() |
#8 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
perfetto!! l'ho appena sistemato: refactoring facile, breve ed indolore
![]() non chiedevo di meglio |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:48.