Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Problema con caricamento dinamico files .jar e reflection

    Ciao a tutti
    Spero mi possiate dare na mano con sto problema perchè so davvero incasinato...

    Sto scrivendo un programma e vorrei dargli un'architettura a plugin. Ho scritto un'interfaccia, che contiene le firme dei metodi che la classe "principale" del plugin deve implementare. L'interfaccia è questa:

    codice:
    package progExtensions; 
    
    import java.io.Serializable; 
    import library.ImageSubdivision; 
    import library.Onthology; 
    
    public interface IImageAnnotationsLoader extends Serializable 
    { 
       String getExtensionName();
    
       void calculateOutput(Onthology ont); 
    
       ImageSubdivision[] getConcepts(); 
    }
    Ometto il javadoc tanto non credo vi interessi


    L'obiettivo è creare un jar contenente una classe MainProgramInterface che implementi questa interfaccia che faccia da ponte fra il plugin e il programma principale. Non posso linkare il tutto a tempo di compilazione dato che vorrei che il programma fosse estendibile in futuro senza il bisogno di ricompilarlo...

    L'implementazione dell'interfaccia nel mio plugin di prova è questa
    codice:
    package annotator.logic;
    
    import annotator.gui.MainFrame;
    import java.awt.event.WindowEvent;
    import java.awt.event.WindowListener;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import library.ImageSubdivision;
    import library.Onthology;
    
    public class MainProgramInterface
    {
       static final long serialVersionUID = -6025009358411818810L;
     
       private MainFrame frame;
       private ImageSubdivision result;
       
       public MainProgramInterface()
       {
          frame = new MainFrame();
       }
    
       public void calculateOutput(Onthology ont)
       {
           frame.addWindowListener(new WindowListener() {
               public void windowOpened(WindowEvent e) {}
               public void windowClosing(WindowEvent e) {}
    
               public void windowClosed(WindowEvent e) 
               {
                  result = frame.getSubdivision();
                  
                  synchronized (result) { result.notify(); }
               }
    
               public void windowIconified(WindowEvent e) {}
               public void windowDeiconified(WindowEvent e) {}
               public void windowActivated(WindowEvent e) {}
               public void windowDeactivated(WindowEvent e) {}
           });
           
    		java.awt.EventQueue.invokeLater(new Runnable() 
          {
             public void run() 
             {
                frame.setVisible(true);
             }
          });
    	}
    
    	public String getExtensionName() 
    	{
    		return "default annotator";
    	}
    
       public ImageSubdivision getConcepts() 
       {
          synchronized(result)
          {
             try 
             {
                result.wait();
             } 
             catch (InterruptedException ex) 
             {
                Logger.getLogger(MainProgramInterface.class.getName()).log(Level.SEVERE, null, ex);
             }
             
             return result;
          }
       }
    
    	
    }
    In pratica apre un frame (definito all'interno del jar del plugin), attende che questo venga chiuso e alla chiusura raccoglie i dati e li passa indietro al richiedente.

    Il mio problema arriva nel momento in cui devo "leggere" il jar dal programma. Mi hanno detto di usare un oggetto ClassLoader, ma non so bene come questo funzioni e, in generale, mi becco una discreta sfilza di NoClassDefFoundError. Per ora sto andando a casaccio, se qualcuno sapesse bene un metodo o anche mi sapesse consigliare delle buone dispense (possibilmente in italiano, ma mastico anche un po' di inglese all'occorrenza) mi farebbe un favore grosso.

    Spero mi possiate dare una mano perchè sono proprio bloccato (è tanto che volevo usare sta faccina! )

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Problema con caricamento dinamico files .jar e reflection

    Originariamente inviato da wr4th
    Il mio problema arriva nel momento in cui devo "leggere" il jar dal programma. Mi hanno detto di usare un oggetto ClassLoader
    Inizia a vedere la classe java.net.URLClassLoader.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.