Ciao a tutti.
Sto usando la libreria ycad ( http://www.ysystems.com/YcadvPageIntro.html )per caricare delle immagini Dxf in un jPanel. Quando clicco su una riga di una tabella viene mostrata l'immagine relativa! Il codice funziona per altri tipi di immagini ma ho problemi con i Dxf.

Ogni volta che cambio riga, anche se il file Dxf è già stato caricato, questo viene ricaricato. Questo potrebbe non essere un problema se non fosse per il fatto che aumenta l'occupazione di memoria dell'applicazione Java, tanto che dopo numerosi caricamenti mi porta all'errore in oggetto java.lang.OutOfMemoryError: Java heap space
! ( quando arriva a circa 100MB , partendo da circa 40MB senza alcuna immagine)

Per evitare questo spaventoso aumento di memoria immagino che debba "chiudere" le immagini/fileDXF che apro prima di ricaricarle! Ma non riesco a capire cosa.. ho provato a chiudere lo FileInputStream dell'oggetto Yxxf stanziato (D nel codice), ma non cambia nulla!

Vi posto il codice che è praticamente quello che l'autore della libreria indica nell'help!

codice:
 

.....

final BufferedImage image = createEffect_ycadv1 ("src=" +  fileName + " stylesrc=txt.shx bgcolor=#000000 width="+a+" height="+c,a, c,null);

...


static private BufferedImage createEffect_ycadv1(String ycadv1PropertiesString, int img_width, int img_height, String applet)
    {
        // Create image
         
        ycadv1image = new BufferedImage(img_width, img_height,BufferedImage.TYPE_INT_RGB);
       
        // Copy image to buffered image
        Graphics2D g2 = ycadv1image.createGraphics();

        


        // Imprint image
        // ====

        // Prepend bounds to properties string
        ycadv1PropertiesString = "xoffset=" + 0 + " " +
                                 "yoffset=" + 0 + " " +
                                 "width="   + ycadv1image.getWidth() + " " +
                                 "height="  + ycadv1image.getHeight() + " " +
                                 ycadv1PropertiesString;

        createEffect_ycadv1_render(ycadv1PropertiesString, g2, applet);

        // ====


        g2.dispose();

        return ycadv1image;
    }

       
       static private void createEffect_ycadv1_render(String ycadv1PropertiesString, Graphics2D jgc, String applet)  //invece di applet, Non mi interessano le applet
      {
        // System.out.println("++ycadv1:render|BEG");
        // System.out.println("++ycadv1:render|str=[" + ycadv1PropertiesString + "]");
        // System.out.println("++ycadv1:render|jgc=[" + jgc + "]");
        // System.out.println("++ycadv1:render|bnd=[" + xoffset + ":" + yoffset + ":" + width + ":" + height + "]");

        if (ycadv1PropertiesString == null)
        {
            System.out.println("++ycadv1:render|parameter error, ycadv1PropertiesString=null");
            System.out.println("++ycadv1:render|END");
            return;
        }
        if (jgc == null)
        {
            System.out.println("++ycadv1:render|parameter error, jgc=null");
            System.out.println("++ycadv1:render|END");
            return;
        }

     // ============================================================
        // Set up drawing
        //
        // Create drawing
        // Create I/O handler and I/O name in drawing
        // Create Get handler
        // ============================================================

        // Create drawing
        
        com.ysystems.ycad.lib.yxxf.Yxxf D = new com.ysystems.ycad.lib.yxxf.Yxxf();   <<<< 
            
        
//         Create I/O Handler
       if (applet == null)
            D.iohandler = new com.ysystems.lib.yutil.YutilIOHandler();

        // Create empty main drawing ioname
        D.ioname = new com.ysystems.lib.yutil.YutilIOHandlerName("main");
        
        // Create Get Handler
        YdxfGetHandler gethandler = new YdxfGetHandler();              
        
        
        
      // ============================================================
        // Create and set user properties (props_user)
        // Sets I/O name values
        // ============================================================
        com.ysystems.lib.yutil.YutilProperties props_user = new com.ysystems.lib.yutil.YutilProperties();

        // Set bounds defaults (file and url have none)      
        props_user.setPropertiesDefaults("xoffset=" + 0, false);
        props_user.setPropertiesDefaults("yoffset=" + 0, false);
        props_user.setPropertiesDefaults("width="   + 160, false);
        props_user.setPropertiesDefaults("height="  + 120, false);

        // Process properties string populating props_user and Drawing I/O structure.
        createEffect_ycadv1_processProperties(ycadv1PropertiesString, props_user, D);

        // Extract bounds
        int param_xoffset = props_user.getProperty_int("xoffset");
        int param_yoffset = props_user.getProperty_int("yoffset");
        int param_width   = props_user.getProperty_int("width");
        int param_height  = props_user.getProperty_int("height");




        // ============================================================
        // Create view handler
        // Get viewer panel from view handler and add to Applet
        // ============================================================
        // System.out.println("++ycadv1:render|setting up view");

        //
        // Create view handler (Observer)
        //
        com.ysystems.ycad.lib.yxxf.YxxfPrtViewHandler vhandler = new com.ysystems.ycad.lib.yxxf.YxxfPrtViewHandler();
        

        // Set parameters in view handler
        // Copy in all properties from props_user that are not used here
        for (Enumeration ep = props_user.propertyNames(); ep.hasMoreElements(); )
        {
            String key = ((String)ep.nextElement()).toLowerCase();
            String keylower = key.toLowerCase();

            if (!keylower.equals("baseurl") &&
                !keylower.equals("src") &&
                !keylower.equals("srcfile") &&
                !keylower.equals("srcurl") &&
                !keylower.startsWith("stylesrc") &&
                !keylower.startsWith("stylesrcfile") &&
                !keylower.startsWith("stylesrcurl"))
            {
                String val = key + "=" + props_user.getProperty(key);
                vhandler.setProperties(val, false);
            }
        }
        vhandler.commandViewHandler_command_init(D, jgc);
        vhandler.commandViewHandler_command_start();


       // ============================================================
        // Start Input
        // ============================================================
        // Start get drawing
        // System.out.println("++ycadv1:render|BEG gethandler.commandGetStart");

        gethandler.commandGetStart(D);

        // System.out.println("++ycadv1:render|END gethandler.commandGetStart");


        // ============================================================
        // Wait for completion
        // ============================================================
        // System.out.println("++ycadv1:render|BEG vhandler.commandViewHandler_command_wait_for_complete");
          
        
        vhandler.waitDrawingViewReady();
               
       vhandler.commandViewHandler_toolbar_redraw();
       vhandler.commandViewHandler_command_wait_for_complete();
        // System.out.println("++ycadv1:render|END vhandler.commandViewHandler_command_wait_for_complete");                
        // System.out.println("++ycadv1:render|END");
 

       D.deleteObservers();
       try {
            D.ioname.is.close();     <<<< Chiusura
       } catch (IOException e) {
        }
    } 
       
       
       
 static private void createEffect_ycadv1_processProperties(String ycadv1Properties, com.ysystems.lib.yutil.YutilProperties props_user, com.ysystems.ycad.lib.yxxf.Yxxf D)
    {
        // Load properties
        props_user.setProperties(ycadv1Properties, true);


        // Set local params
        ........... tagliato
    }
Grazie cmq