|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Apr 2004
Messaggi: 56
|
[Java] Accesso a files da piu'thread
Ciao a tutti!
Mi domandavo se qualcuno aveva un idea su questo mio problema: ho una servlet che dati un percorso e delle coordinate legge una immagine ne fa il crop e salva questa immagine con un nuovo nome tipo "percorso_x_y_w_h" Ora, sotto .NET con i files ashx (tipo servlet per intenderci) non ci son problemi di sorta. Mentre se faccio lo stesso in Java mi trovo in una situazione inquietante: 1) Leggo a.jpg, ne taglio un pezzo che chiamo b.jpg 2) Quasi contemporaneamente leggo a.jpg e ne taglio un pezzo DIVERSO che ciamo c.jpg... 3) Il risultato e'che b.jpg e c.jpg sono uguali!!!!!!!!!!! Notare che a.jpg e'sul classpath e viene letta tramite getClassLoader().getResourceAsStream mentre b.jpg e c.jpg sono sul filesystem reale.. Per scrivere i vari files da file system uso ImageIO.write ..non e'che il metodo non e'thread safe??? Se qualcuno ha un idea si faccia avanti che sto impazzendo!! Grazie a tutti!! ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Non vedo problemi di thread. Probabilmente c'è un errore logico nel programma.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Apr 2004
Messaggi: 56
|
Eh...
Beh, ti direi di si se non funzionasse con .Net, il codice e'praticamente lo stesso (a parte le librerie di sistema e la sintassi per intenderci), con caricamento delle risorse dalle dll e salvataggio in area temporanea, o meglio cache.. mi sarei piu'aspettato che funzionasse Java! C'e'da dire anche che sono sotto Linux con una Jvm openSource, ma mi sembra strano possa centrare.
Tra l'altro se preparo le immagini corrette nella mia cache poi vengono viste correttamente. Poi non faccio certo cose turche, ho questa servlet che serve per caricare le immagini che legge con getResourceAsStream dal classloader una jpg (per es) dal jar, se trova una jpg nella cache con lo stesso nome legge quella e la invia al client altrimenti crea in cache la nuova immagine, la legge e la invia al client... Sto andando di debugger ma non vedo nulla di strano!! Adesso arrivero'a segnarmi gli id delle istanze di classe per vedere se per caso ci sono duplicati che appaiono come per magia... |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Java su Linux funziona allo stesso modo di Java su Windows.
Il problema è che se hai un'immagine, ne leggi due parti diverse e quelle due parti ti risultano uguali o le letture non sono diverse o vai a sovrascrivere uno dei due risultati con l'altro.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Apr 2004
Messaggi: 56
|
Speravo in qualcosa del genere, in preda al delirio cosmico ho provato a caricare i files tramite la servlet uno per uno, la notizia sconvolgente e che sembra che non vengano considerate le coordinate con cui taglio l'immagine... se non altro non mi sono rimbecillito del tutto, ma a sto punto mi domando se il metodo che uso ha un senso...
Codice PHP:
|
![]() |
![]() |
![]() |
#6 | |
Member
Iscritto dal: Apr 2004
Messaggi: 56
|
Qualcuno dice sia un bug...
https://bugs.launchpad.net/ubuntu/+s...a6/+bug/241346 e in effetti il mio caso Quote:
|
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Nella bugparade lo danno per risolto con la versione _7 (quella attuale è la _18)
Prova a creare un buffer temporaneo: imgRes = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); imgRes.getGraphics().drawImage(img, -x, -y, null);
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Apr 2004
Messaggi: 56
|
Ed in effetti colla copia del buffer funziona magicamente tutto e si "dimentica" di essere una gif... Per la cronaca, se accade ad altri, il "java -version" mi dava questo:
Codice PHP:
![]() Ultima modifica di zakmckraken : 17-02-2010 alle 07:32. Motivo: ringraziamenti! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:38.