使用插件进行资源处理

时间:2014-02-03 16:05:23

标签: java

我希望您对我在支持插件的应用程序中加载资源的实现有所了解。

在我的主应用程序中,我有一个资源处理程序类,我已经将其暴露给我的插件。当插件试图获取他们的资源时,这个类被创建为一个帮助类。

 public class ResourceHelper{
     private Class<?> T;
     public ResrouceHandler(Class<?> T){
        this.T = T;
     }
     public BufferedImage getImageResource(String path){
           T.getClassLoader().getResource()...
     }

 }

为了使用助手,调用者必须创建一个实例。

ResourceHelper resourceHelper = new ResourceHelper(getClass())

但我不想再使用getClass()方法,而是让ResourceHelper自己获取当前的类加载器。我尝试过使用Thread.currentThread()。getContextClassLoader()但它似乎没有用。

1 个答案:

答案 0 :(得分:1)

不确定你做错了什么,但你的助手班对我来说很好。

TestResourceHelper.java

import factory.ResourceHelper;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TestResourceHelper {
    private static class ImagePanel extends JPanel {
        BufferedImage img;
        ResourceHelper helper;
        public ImagePanel() throws IOException {
            helper = new ResourceHelper(TestResourceHelper.class);
            img = helper.getImageResource("resources/stackoverflow5.png");
        }
        protected void paintComponent(Graphics g) {
            g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
        }
        public Dimension getPreferredSize() {
            return new Dimension(250, 250);
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                try {
                    JOptionPane.showMessageDialog(null, new ImagePanel(), "Test Image", JOptionPane.PLAIN_MESSAGE);
                } catch (IOException ex) {
                    Logger.getLogger(TestResourceHelper.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });
    }
}

ResourceHelper.java

import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;

 public class ResourceHelper{
     private Class<?> T;
     public ResourceHelper(Class<?> T){
        this.T = T;
     }
     public BufferedImage getImageResource(String path) throws IOException{
           BufferedImage image = ImageIO.read(T.getClassLoader().getResource(path));
           return image;
     }
 }

文件结构

enter image description here

结果

enter image description here