Utilizar .Jar na aplicação

Pessoal bom dia.
Eu tenho um projeto que é somente para autentica o acesso do usuário ao banco (é um login).
Eu utilizo este projeto em diversos outros projetos . contudo ele dá um erro javax.imageio.IIOException:

[code]public class FrmLogin extends javax.swing.JDialog implements ActionListener, KeyListener {

/** Creates new form asdasfdfa */
private FrmLogin() {
    this.setUndecorated(true);
    initComponents();
    this.setModal(true);
    this.setResizable(false);

    jTextField1.addActionListener(this);
    jTextField2.addActionListener(this);
    this.setFocusable(true);

    this.jComboBox1.removeAllItems();
    this.jComboBox1.addItem(ConnectionFactory.getDataBase().getNome());

    this.addKeyListener(this);
    System.out.print(this.jImagePanel1.getComponents().length);
    for (Component comp : this.jImagePanel1.getComponents()) {
        comp.addKeyListener(this);
    }

    this.setLocationRelativeTo(this);
    this.setVisible(true);
}

public static boolean execute() {
    Acess acesso = new Acess();
    if (acesso.isConectado()) {
        acesso.close();
    }

    FrmLogin login = new FrmLogin();

    if (acesso.isConectado()) {
        return true;
    } else {
        return false;
    }
}

public static boolean execute(String look) {
    try {
        UIManager.setLookAndFeel(look);
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    Acess acesso = new Acess();
    if (acesso.isConectado()) {
        acesso.close();
    }


    FrmLogin login = new FrmLogin();

    if (acesso.isConectado()) {
        return true;
    } else {
        return false;
    }
}

public static boolean execute(LookAndFeel look) {
    try {
        UIManager.setLookAndFeel(look);
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    Acess acesso = new Acess();
    if (acesso.isConectado()) {
        acesso.close();
    }

    FrmLogin login = new FrmLogin();

    if (acesso.isConectado()) {
        return true;
    } else {
        return false;
    }
}

/** This method is called from within the constructor to
 * initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is
 * always regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    jImagePanel1 = new componentsjapa.JImagePanel(new Color(186, 229, 245), Color.WHITE);

    //O ERRO  ESTA NESTA LINHA ABAIXO
    jImagePanel2 = new componentsjapa.JImagePanel(new File(getClass().getResource("/br/com/topsoft/topacess/View/log.bmp").getFile()));


    jLabel1 = new javax.swing.JLabel();
    jComboBox1 = new javax.swing.JComboBox();
    jLabel2 = new javax.swing.JLabel();
    jTextField1 = new javax.swing.JTextField();
    jLabel3 = new javax.swing.JLabel();
    jLabel4 = new javax.swing.JLabel();
    jButton1 = new javax.swing.JButton();
    jButton2 = new javax.swing.JButton();
    jLabel5 = new javax.swing.JLabel();
    jPasswordField1 = new javax.swing.JPasswordField();
    jTextField2 = new javax.swing.JTextField();

    setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

    jImagePanel2.setBackground(new java.awt.Color(255, 255, 255));

    javax.swing.GroupLayout jImagePanel2Layout = new javax.swing.GroupLayout(jImagePanel2);
    jImagePanel2.setLayout(jImagePanel2Layout);
    jImagePanel2Layout.setHorizontalGroup(
            jImagePanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 295, Short.MAX_VALUE));
    jImagePanel2Layout.setVerticalGroup(
            jImagePanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 70, Short.MAX_VALUE));

    jLabel1.setText("Base:");

    jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"Item 1", "Item 2", "Item 3", "Item 4"}));

    jLabel2.setText("Filial:");

    jLabel3.setText("Senha:");

    jLabel4.setText("Login:");

    jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/topsoft/topacess/View/cancel2-16.png"))); // NOI18N
    jButton1.setText("Sair");
    jButton1.addActionListener(new java.awt.event.ActionListener() {

        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });

    jButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/topsoft/topacess/View/check2-16.png"))); // NOI18N
    jButton2.setText("Entrar");
    jButton2.addActionListener(new java.awt.event.ActionListener() {

        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton2ActionPerformed(evt);
        }
    });

    jLabel5.setText("Pressione Alt+C para mudar o Servidor.");
    jLabel5.setFont(new Font(jLabel5.getFont().getFontName(), jLabel5.getFont().getStyle(), 10));

    javax.swing.GroupLayout jImagePanel1Layout = new javax.swing.GroupLayout(jImagePanel1);
    jImagePanel1.setLayout(jImagePanel1Layout);
    jImagePanel1Layout.setHorizontalGroup(
            jImagePanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jImagePanel1Layout.createSequentialGroup().addGroup(jImagePanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jImagePanel1Layout.createSequentialGroup().addGap(10, 10, 10).addGroup(jImagePanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false).addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING).addComponent(jComboBox1, 0, 80, Short.MAX_VALUE))).addGroup(jImagePanel1Layout.createSequentialGroup().addContainerGap().addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE))).addGap(18, 18, 18).addGroup(jImagePanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jLabel2).addComponent(jLabel3).addGroup(jImagePanel1Layout.createSequentialGroup().addGroup(jImagePanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false).addComponent(jPasswordField1, javax.swing.GroupLayout.Alignment.LEADING).addComponent(jTextField1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 79, Short.MAX_VALUE)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addGroup(jImagePanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false).addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))).addGroup(jImagePanel1Layout.createSequentialGroup().addContainerGap().addComponent(jLabel4)).addGroup(jImagePanel1Layout.createSequentialGroup().addContainerGap().addComponent(jLabel5)).addComponent(jImagePanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE));
    jImagePanel1Layout.setVerticalGroup(
            jImagePanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jImagePanel1Layout.createSequentialGroup().addComponent(jImagePanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18).addGroup(jImagePanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel1).addComponent(jLabel2)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addGroup(jImagePanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(jButton1)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addGroup(jImagePanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel4).addComponent(jLabel3)).addGap(6, 6, 6).addGroup(jImagePanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jPasswordField1, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(jButton2)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addComponent(jLabel5).addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jImagePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE));
    layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jImagePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE));

    pack();
}// </editor-fold>                        

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    System.exit(0);
}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
    Usuario usuario = new Usuario();
    usuario.setNome(jTextField2.getText());
    String senha = String.copyValueOf(jPasswordField1.getPassword());
    usuario.setSenha(senha);
    if (new Acess().Conectar(usuario)) {
        this.dispose();
    }
}

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {
            FrmLogin dialog = new FrmLogin();
            dialog.addWindowListener(new java.awt.event.WindowAdapter() {

                public void windowClosing(java.awt.event.WindowEvent e) {
                    System.exit(0);
                }
            });
            dialog.setVisible(true);
        }
    });
}
// Variables declaration - do not modify                     
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JComboBox jComboBox1;
private componentsjapa.JImagePanel jImagePanel1;
private componentsjapa.JImagePanel jImagePanel2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JPasswordField jPasswordField1;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
// End of variables declaration                   

}[/code]

neste caso como faço para carregar a imagem que esta em outro projeto?
abrsss

De tanto ter esse erro criei uma classe para resolver o problema.


#####
Class ImagemLoad
#####
package utils;

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

public class ImagemLoad {

    public BufferedImage imageLoader(String imgString) {

        ClassLoader ccl = Thread.currentThread().getContextClassLoader();

        BufferedImage imagem = null;
        try {
            URL imgUrl = ccl.getResource(imgString);
            if (imgUrl == null) {
                throw new IllegalArgumentException("imgString='" + imgString + "' is not a valid image!");
            }

            imagem = ImageIO.read(imgUrl);
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
        }

        return imagem;
    }
}

#####
Class ToImageIcon
#####
package utils;

import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;

public class ToImageIcon {

    public ImageIcon toImageIcon(BufferedImage img) {
        ImageIcon icon = new ImageIcon(img.getScaledInstance(img.getWidth(), img.getHeight(), 10000));
        return icon;
    }
}

Agora, explicando o que o corre.

O uso de thread se da devido a rotina não saber qual thread estará rodando este código
então se o classloader que carregou esta classe for diferente do classloader que está rodando a thread
ele não vai encontrar a imagem mesmo ela estando lá

para usar a classe é simples

javax.swing.ImageIcon myImage = new ToImageIcon().toImageIcon(new ImagemLoad().imageLoader("imagem/imagem.png"));