Utilizar .Jar na aplicação

1 resposta
T

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:

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                   

    
}

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

1 Resposta

RodrigoValentim

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"));
Criado 28 de outubro de 2011
Ultima resposta 28 de out. de 2011
Respostas 1
Participantes 2