Problema com envio de foto
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,
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....
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
Curtidas 0
Respostas
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
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
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
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
att Davi
GOSTEI 0
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
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
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
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
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
30/05/2011
Hm.. sakei,mas gera alguma Exception?
Att Davi
Att Davi
GOSTEI 0
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...
"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
30/05/2011
Faz o seguinte então posta o StackTrace inteiro para gente analisar.
Att Davi
Att Davi
GOSTEI 0
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)
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
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
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
30/05/2011
o código da linha 1195 é esse.....
String foto = ""+busca_foto.getSelectedFile().getName();
GOSTEI 0
Davi Costa
30/05/2011
Beleza, provavelmente esse cara está nulo:
busca_foto.getSelectedFile()
att Davi
busca_foto.getSelectedFile()
att Davi
GOSTEI 0
Eduardo Oliveira
30/05/2011
intão eu devo passar algum valor no getSelectedFile()??
GOSTEI 0
Davi Costa
30/05/2011
Com certeza tem que tratar esse nullpointer de alguma forma.
Att Davi
Att Davi
GOSTEI 0
Eduardo Oliveira
30/05/2011
mas um exemplo do parametro q posso passar pra ele, to meio q perdidoo =/
GOSTEI 0
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
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
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
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
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
30/05/2011
Tranquilo eduardo, o que precisar pode contar com a gente.
Ps. gostei da imagem... srrsrsrsrs
Att Davi
Ps. gostei da imagem... srrsrsrsrs
Att Davi
GOSTEI 0
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
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
30/05/2011
Resolvido ?
Se sim , poderia fechar ?
Valeu !
Se sim , poderia fechar ?
Valeu !
GOSTEI 0
Dyego Carmo
30/05/2011
Se for um arquivo dentro do JAR voce pode usar um NomeClass.class.getResourceAsStream();
GOSTEI 0
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