Problema com envio de foto

Java

30/05/2011

Olá companheiros, sou iniciante em java, e estou tendo um probleminha que me parece ser coisa simples, mas quem não tem tanta experiencia gera certos atrasos, mas enfim, negocio é o seguinte tenho um formulário na onde quero inserir a foto do cliente q ta sendo cadastrado, ae tenho um campo do tipo texto, onde eu digito o nome da imagem e sua extensão, só que ele não traz essa imagem, veja uma parte do código abaixo,

                tf_foto.setText(con_cliente.resultset.getString("foto"));
                lbFoto.setIcon(new ImageIcon("/Estoque/images/"+tf_foto.getText()));



Observação.:eu criei uma caixa de dialogo tambem, pra que o usuario possa procurar pela imagen, e indiquei esse mesmo diretório para ele abrir, só que ele abre no meus documentos, não no diretorio mostrado no código acima....
Eduardo Oliveira

Eduardo Oliveira

Curtidas 0

Respostas

Davi Costa

Davi Costa

30/05/2011

A foto selecionada pelo usuário veio dessa pasta(/Estoque/images/"+tf_foto.getText())??

Que tal tratarmos como File antes de passarmos para ImageIcon. Depois que estiver tudo ok vc refatora para ImageIcon.

Se abrir em meu documentos não tem problema, vc trata pegando o caminho inteiro até a imagem, ou pega o array de bytes e salva essa imagem em uma pasta do seu programa.


Att Davi
GOSTEI 0
Eduardo Oliveira

Eduardo Oliveira

30/05/2011

intão minha dúvida está ae. porque no campo de texto que eu entro com o nome da imagem e sua extensão ta beleza, ele até salva no banco exemplo. FOTO = semfoto.jpg isso no banco, só que no formulário em si, ele não me retorna ela, ela preenche o campo com o nome da imagem, mas não a insere na label.....
GOSTEI 0
Davi Costa

Davi Costa

30/05/2011

No banco ele precisa salvar não só o nome do arquivo, mas todo o caminho. Por exemplo C:\imagem.jpg



att Davi
GOSTEI 0
Robson Teixeira

Robson Teixeira

30/05/2011

Tente usar o JFileChose pois com ele vc envia o arquivo e pode obter-lo como File e apartir disso vc obtem o diretorio dele todo.   att  robson
GOSTEI 0
Eduardo Oliveira

Eduardo Oliveira

30/05/2011

Então cheguei a utilizar o FileChos, só que mesmo assim, a imagem não carrega..... se poderem dar uma analisada no código ficaria grato;....

    private void button_fotoActionPerformed(java.awt.event.ActionEvent evt) {                                            
       try
       {
           JFileChooser busca_foto = new JFileChooser();
           busca_foto.setCurrentDirectory(new File("/Estoque/images/"));
           busca_foto.setDialogTitle("Carregar imagen do cliente");
           busca_foto.showOpenDialog(this);
           String foto = ""+busca_foto.getSelectedFile().getName();
           tf_foto.setText(foto);
           lbFoto.setIcon(new javax.swing.ImageIcon("/Estoque/images"+tf_foto.getText()));
       }
       catch(Exception erro)
       {
            // JOptionPane.showMessageDialog(null,"Não foi possivel inseriri foto" +erro);
       }
    }

GOSTEI 0
Davi Costa

Davi Costa

30/05/2011

só vai funcionar se a imagem estiver dentro desse diretório /Estoque/images/.
Eu aconselharia vc a salvar a imagem nesse diretório se ela não estiver nela e depois salvar o registro da foto no banco, do diretório /Estoque/images/.
Para isso funcionar não deve setar o diretório amarrando como vc fez /Estoque/images/, vai ter que deixar a do arquivo selecionado.

att Davi
GOSTEI 0
Eduardo Oliveira

Eduardo Oliveira

30/05/2011

então a imagem esta dentro desse diretório quanto a isso tenho certeza, é que tipo estou fazendo seguindo umas video aulas, no que eu vi no video, roda beleza desse mesmo jeito, só que aqui não esta indo....
GOSTEI 0
Davi Costa

Davi Costa

30/05/2011

Hm.. sakei,mas gera alguma Exception?

Att Davi
GOSTEI 0
Eduardo Oliveira

Eduardo Oliveira

30/05/2011

se eu descomentar a linha do catch. ele da o seguinte erro

"java.lang.nullPointerException" mas ele só da essa mensagem, si eu clicar no cancelar da caixa de diálogo, caso eu escolha o arquivo, e clique em abrir, ele ja passa no nome dele pro textField, mas não insere ele no label...
GOSTEI 0
Davi Costa

Davi Costa

30/05/2011

Faz o seguinte então posta o StackTrace inteiro para gente analisar.

Att Davi
GOSTEI 0
Eduardo Oliveira

Eduardo Oliveira

30/05/2011

sou iniciante, mas se entendi o que vc me disse, é isso que vc precisa para analisar??

run:
java.lang.NullPointerException
       
        at cadastros.cad_cliente.button_fotoActionPerformed(cad_cliente.java:1195)
        at cadastros.cad_cliente.access$700(cad_cliente.java:25)
        at cadastros.cad_cliente$8.actionPerformed(cad_cliente.java:412)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6289)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6054)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4652)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4482)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4482)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)
        at java.awt.EventQueue.access$000(EventQueue.java:85)
        at java.awt.EventQueue$1.run(EventQueue.java:603)
        at java.awt.EventQueue$1.run(EventQueue.java:601)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
        at java.awt.EventQueue$2.run(EventQueue.java:617)
        at java.awt.EventQueue$2.run(EventQueue.java:615)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
CONSTRUÍDO COM SUCESSO (tempo total: 40 segundos)
GOSTEI 0
Davi Costa

Davi Costa

30/05/2011

O erro está nessa linha cad_cliente.java:1195,
posta ele para gente ver o que pode estar vindo nulo, ou debuga e já descobre o que está vindo nulo.

Att Davi
GOSTEI 0
Eduardo Oliveira

Eduardo Oliveira

30/05/2011

o código da linha 1195 é esse.....


         String foto = ""+busca_foto.getSelectedFile().getName();


GOSTEI 0
Davi Costa

Davi Costa

30/05/2011

Beleza, provavelmente esse cara está nulo:
busca_foto.getSelectedFile()
att Davi

GOSTEI 0
Eduardo Oliveira

Eduardo Oliveira

30/05/2011

intão eu devo passar algum valor no getSelectedFile()??
GOSTEI 0
Davi Costa

Davi Costa

30/05/2011

Com certeza tem que tratar esse nullpointer de alguma forma.

Att Davi
GOSTEI 0
Eduardo Oliveira

Eduardo Oliveira

30/05/2011

mas um exemplo do parametro q posso passar pra ele, to meio q perdidoo =/
GOSTEI 0
Davi Costa

Davi Costa

30/05/2011

Seguinte seu parâmetro é um File (java.io):

busca_foto.setSelectedFile(new File("caminho\\arquivo.jpg"));


Mas agora vc coloca o arquivo tb, não só a pasta.

att Davi
GOSTEI 0
Davi Costa

Davi Costa

30/05/2011

Só para reforçar:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4893572

http://www.coderanch.com/t/346734/GUI/java/JFileChooser-setSelectedFile-hangs

http://stackoverflow.com/questions/356671/jfilechooser-showsavedialog-how-to-set-suggested-file-name

E um exemplo de teste:



import java.awt.*;

import java.awt.event.*;
import java.io.File;
import javax.swing.*;

public class Test extends JFrame {
    JFileChooser chooser = new JFileChooser();
    JButton button = new JButton("Escolha um arquivo ...");

    public Test() {
        super("Exemplo JFileChooser");
        Container contentPane = getContentPane();

        contentPane.setLayout(new FlowLayout());
        contentPane.add(button);

        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                int state = chooser.showOpenDialog(null);
                File file = chooser.getSelectedFile();

                if (file != null && state == JFileChooser.APPROVE_OPTION) {
                    JOptionPane.showMessageDialog(null, file.getPath());
                } else if (state == JFileChooser.CANCEL_OPTION) {
                    JOptionPane.showMessageDialog(null, "Cancelado");
                }
            }
        });
    }

    public static void main(String args[]) {
        JFrame f = new Test();
        f.setBounds(300, 300, 350, 100);
        f.setVisible(true);

        f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

        f.addWindowListener(new WindowAdapter() {
            public void windowClosed(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}


Espero ter ajudado

Att Davi
GOSTEI 0
Eduardo Oliveira

Eduardo Oliveira

30/05/2011

Davi muito obrigado pela ajuda, vou testar o exemplo que voce me passou, e tentar passar o parametro pro getSelected.Mais a noite eu volto, porque agora to na facul estagio e a correria, mas assim que eu tiver uma resposta do teste volto aqui pra te dizer, tenha um Bom Dia com Deus ae!!!!
GOSTEI 0
Davi Costa

Davi Costa

30/05/2011

Tranquilo eduardo, o que precisar pode contar com a gente.
Ps. gostei da imagem... srrsrsrsrs


Att Davi
GOSTEI 0
Eduardo Oliveira

Eduardo Oliveira

30/05/2011

Ohh Davi boa noite cara, te fala testei aqui a passagem de parametro  como vc tinha me dito....

busca_foto.setSelectedFile(new File("caminho\\arquivo.jpg")).getName();

só que da erro na linha de sintaxe, não tem como eu passar o diretório e o nome do arquivo nessa linha...se tem eu não sei =/ kkk


busca_foto.setCurrentDirectory(new File("/Estoque/images/"));

quando eu passo pro setCurrentDirectory o "/Estoque/images/", a caixa de dialogo não deveria abrir ai diretamente.....??? porque quando eu rodo a aplicação ele abre o Meus Documentos, ae tenho que procurar até chega nesse caminho que é passado "setCurrentDirectory(new File("/Estoque/images/"))"

e a mensagem de erro, eu percebi que ela só da quando eu clico no cancelar, sem ter selecionado nenhum arquivo, exemplo se eu tiver selecionado uma pasta e clicar no cancelar ele da erro, agora se eu seleciono qualquer outro arquivo ele passa o nome numa boa.....sem dar o erro


GOSTEI 0
Dyego Carmo

Dyego Carmo

30/05/2011

Resolvido ?

Se sim , poderia fechar ?

Valeu !
GOSTEI 0
Dyego Carmo

Dyego Carmo

30/05/2011

Se for um arquivo dentro do JAR voce pode usar um NomeClass.class.getResourceAsStream();
GOSTEI 0
Eduardo Oliveira

Eduardo Oliveira

30/05/2011

Nossa me Desculpem pela demora em manter esse tópico aberto, o problema ja foi solucionado e de maneira bem simples ainda, fuçando eu copiei meu projeto para raiz do meu HD, mandei ele executa aplicação e la estavam os formularios com as Fotos.....MUITO OBRIGADO A TODOS PELA AJUDA!!!!!!
GOSTEI 0
POSTAR