Vous n'êtes pas connecté. Connexion
|
|
TD3 - Chargement dynamiqueDe $1Table des matièresCe TP a pour objectif d'étudier les mécanismes de chargement dynamique en Java et en particulier le fonctionnement de la classe MyClassLoaderOn veut créer son propre public class MyClassLoader extends SecureClassLoader { private ArrayList<File> path = null; public MyClassLoader(ArrayList<File> p) { this.path = p; } @Override protected Class<?> findClass(String name) throws ClassNotFoundException { byte[] b = loadClassData(name); return super.defineClass(name, b, 0, b.length); } private byte[] loadClassData(String name) throws ClassNotFoundException { // TODO A COMPLETER return null; } public static void main(String[] args) { ArrayList<File> al = new ArrayList<File>(); al.add(new File(....); MyClassLoader myCL = new MyClassLoader(al); try { myCL.loadClass(...); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } Le nom de classe donné est le nom qualifié (par exemple: Attention ! La classe Pour tester votre programme il faut se souvenir qu'il ne faut pas appeler la méthode RepositoryOn veut maintenant pouvoir charger toutes les classes qui se trouvent dans un répertoire donné. On utilisera pour faire le chargement, la classe
MyClassLoader développée à l'exercice précédent.Toutes les classesDans un premier temps, on chargera et renverra toutes les classes correspondant à un fichier .class, sans discrimination.
On pourra par exemple compléter la classe package miage.m1.dynamicLoading; public class Repository{ public Repository(File base) { // TODO A compléter } public List<Class<?>> load() { // TODO A compléter } } Seulement les classes héritant de TDans un deuxième temps, on renverra uniquement les classes héritant d'un type donné
On pourra par exemple compléter la classe package miage.m1.dynamicLoading; public class Repository<T> { public Repository(File base, Class<T> superClass) { // TODO A compléter } public List<Class<? extends T>> load() { // TODO A compléter } } MenuPour tester vos classes:
La classe Java ci-dessous créé une fenêtre et y ajoute un menu statiquement. A vous de la modifier pour y ajouter un menu dynamiquement selon les instructions données plus haut. package miage.m1.menu; import java.awt.BorderLayout; public class FrameWithMenu { void showFrame() { if (frame == null) { frame = new JFrame("Test menu"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); contentPane.setLayout(new BorderLayout(0, 0)); frame.setContentPane(contentPane); } buildMenu(); frame.setVisible(true); } JFrame frame; private JPanel contentPane; @SuppressWarnings("serial") void buildMenu() { JMenuBar bar = new JMenuBar(); frame.setJMenuBar(bar); JMenu fileM = new JMenu("Fichier"); bar.add(fileM); fileM.add(new AbstractAction("Save", new ImageIcon("res/save-icon16.png")) { @Override public void actionPerformed(ActionEvent arg0) { System.out.println("DoSaveAction:"+arg0); } @Override public Object getValue(String arg0) { if(arg0==Action.ACCELERATOR_KEY) // cannot be changed later (use putValue when possible - not anonymous) return KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_DOWN_MASK); return super.getValue(arg0); } }); } public static void main(String[] args) { new FrameWithMenu().showFrame(); } } |
Powered by MindTouch Deki Open Source Edition v.8.08 |