Visualizzazione dei risultati da 1 a 10 su 13

Hybrid View

  1. #1
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Premesso che dal codice che hai postato non è che si possa capire molto. Non è nemmeno scritto bene (probabilmente copia-incollato male ... mi auguro nel tuo progetto non sia scritto così mal indentato e mal spaziato). Non sappiamo nemmeno cosa fanno le classi Immagine e Draw.

    Comunque, c'è un'altra questione. Nella pagina web come è visualizzata la immagine? Suppongo con il classico tag <img>. E l'url della immagine quale è? È fisso ... oppure cambia?
    Nel progetto è OK il codice. Nel copiare la formattazione si sfalda.
    Il src è fisso si. Questo perché il programma salva sempre nella stessa posizione il file png e viene riletto da li.

    Ti posto i due html in resource/templates/:


    DrawWeb:
    codice:
      <!DOCTYPE html>
      <html xmlns:th="http://www.thymeleaf.org" lang="en">
     <head>
     <meta charset="utf-8">
     <title>Disegno </title>
     </head>
     <body>
      <h1>Disegno</h1>
      <table class="app-draw">
         
         <img src="/img/ass-isometrica.png" />
         
         <div>
             <form action="save" method="post">
                 <label for="X_0">X(x,y)=</label><br>
                 <input type="text" name="X" placeholder="(1.75-1.25+1.25*cos(x))*cos(y)" value="sin(x)"/><br>
                 <label for="Y_0">Y(x,y)=</label><br>
                 <input type="text" name="Y" placeholder="(1.75-1.25+1.25*cos(x))*sin(y)" value="cos(x)"/><br>
                 <label for="Z_0">Z(x,y)=</label><br>
                 <input type="text" name="Z" placeholder="1.25*sin(y)" value="sin(x)"/><br>
                 <input type="submit" value="Draw" />
             </form>
         </div>
       
     </table>
      </body>
     </html>
    
    DrawWebEdit.html:
    codice:
      <!DOCTYPE html>
    
      <html xmlns:th="http://www.thymeleaf.org" lang="en">
     <head>
     <meta charset="utf-8">
    
     <title>Disegno</title>
     </head>
     <body>
      <h1>Disegno Visualizzato:</h1>
      <table class="app-draw">
         
         <img src="/img/ass-isometrica-saved.png" />
         
         <!--
    
         <div>
             <form action="draw" method="get">
                 <input type="submit" value=" <-- Draw " />        
    
             </form>
         </div>
         -->
       
     </table>
      </body>
    
     </html>
    
     
    Il programma Draw avvia tramite un thread incluso in un metodo il codice che crea l'immagine.
    La classe immagine lavora con Draw e si occupa di gestire, la creazione, il salvataggio ecc...
    jabjoint

  2. #2
    Immagine(elimino dei dati perché di troppo):

    codice:
    
    
       public class Immagine {             
      
           //private...
     
      
     public Immagine(String filename){                    
     
     
     try...
     
     this.firstImage = ImageIO.read(new File(filename));
     this.image = firstImage;
    
     
     
            }    
     
     void initPolygon(){
     
     A = new Point[4];
     
     A[0] = new Point(222,250);
     A[1] = new Point(272,274);
     A[2] = new Point(222,300);
     A[3] = new Point(172,275);    
     
     P = new Point[4];
     
            }
     
    
      
            Image getImage(){
     
     returnimage;
     
            }
    
    
    
     
            BufferedImage getFirstImage(){
     
     returnfirstImage;           
            }
     
     
     void setImage(BufferedImage image) {
     
     this.image = image;
     
            }
     
     void flush(){
     
     image.flush();
     
            }
    
    
    
     
     public Polygon getPolygon() {
     
     return p;
     
            }           
    
    
    
     
     publicvoid setPolygonXYZ(doubleX, doubleY, doubleZ) {
     
     
     P[0] = new Point((int)(A[0].x-LX*X+Y*LX), (int)(A[0].y+X*LY/2+LY/2*Y-Z*LZ));
     P[1] = new Point((int)(A[1].x-LX*X+Y*LX), (int)(A[1].y+X*LY/2+LY/2*Y-Z*LZ));
     P[2] = new Point((int)(A[2].x-LX*X+Y*LX), (int)(A[2].y+X*LY/2+LY/2*Y-Z*LZ));
     P[3] = new Point((int)(A[3].x-LX*X+Y*LX), (int)(A[3].y+X*LY/2+LY/2*Y-Z*LZ));
     
     p = new Polygon();
     
     p.addPoint(P[0].x,P[0].y);   
     p.addPoint(P[1].x,P[1].y); 
     p.addPoint(P[2].x,P[2].y); 
     p.addPoint(P[3].x,P[3].y);
     
     
            } 
     
     void disegna(Color colore){    
     
     g = image.getGraphics();           
     g.setColor(colore);          
     g.fillPolygon(p);
     
            }      
    
     
     public void saveImage(String filename) throws IOException {
    
                ImageIO.write(image, "png", new File(filename));           
     
            }     
     
     }   
    jabjoint

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da jabjoint Visualizza il messaggio
    Questo perché il programma salva sempre nella stessa posizione il file png
    Questo di per sé non è un buon approccio. Che succede se ci sono più utenti?

    Quote Originariamente inviata da jabjoint Visualizza il messaggio
    DrawWebEdit.html:
    codice:
    <img src="/img/ass-isometrica-saved.png" />
    L'url è fisso, quindi il browser fa il caching della immagine e non la richiede più.
    In tal caso basterebbe applicare il cache busting (info es. https://www.keycdn.com/support/what-is-cache-busting)

    Ah, e il cache-busting è solo una parte del problema. Infatti parli di "thread". A parte il fatto che nelle webapp non andrebbero creati thread così a caso/al volo. Andrebbero fatte scelte più appropriate. Ma resta anche il fatto che se il thread ci mette un po' e tu invece nel frattempo hai già inviato la pagina in response e il browser fa già subito la request della immagine (anche supponendo con il cache busting), se il thread non avesse ancora finito ... sei da capo.

    No, non vanno fatti questi ragionamenti così ....
    Ultima modifica di andbin; 11-01-2023 a 13:29
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Questo di per sé non è un buon approccio. Che succede se ci sono più utenti?


    L'url è fisso, quindi il browser fa il caching della immagine e non la richiede più.
    In tal caso basterebbe applicare il cache busting (info es. https://www.keycdn.com/support/what-is-cache-busting)

    Ah, e il cache-busting è solo una parte del problema. Infatti parli di "thread". A parte il fatto che nelle webapp non andrebbero creati thread così a caso/al volo. Andrebbero fatte scelte più appropriate. Ma resta anche il fatto che se il thread ci mette un po' e tu invece nel frattempo hai già inviato la pagina in response e il browser fa già subito la request della immagine (anche supponendo con il cache busting), se il thread non avesse ancora finito ... sei da capo.

    No, non vanno fatti questi ragionamenti così ....
    Si, hai perfettamente inquadrato i problemi infatti(anche del Thred), di cui mi rendo conto quindi.

    Infatti se salvo dentro il thread dopo che ha finito, bene l'immagine viene salvata(almeno), altrimenti se provo a salvare fuori dallo stesso thread l'immagine viene salvata come da impostazioni iniziali, senza la grafica 3D, solo l'immagine di default(gli assi),

    Quindi qui ho risolto(ma male per il salvataggio(in parte)) salvando all'interno del thread, che forse mi conviene togliere?

    E' che il thread lo creai precedentemente per vedere la costruzione dell'immagine nella JLabel.

    Io penso che il thread per fare le cose bene vada gestito in modo pulito.

    Per il cache busting devo ancora leggerlo!

    Io poi pensavo di creare un nome del file dipendente dal tempo, di modo che non potranno essercene più di uno ed associarli agli utenti(eventualmente, se non resta un progetto di prova).

    Ma per il momento mi basta che funzioni per un solo utente, è una prova che sto facendo...
    Ultima modifica di jabjoint; 11-01-2023 a 15:14
    jabjoint

  5. #5
    Di fatto si, il file che mi fa vedere(immagine .png) è quella che carica nella Cache al primo accesso dell'APP.
    jabjoint

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.