esse byteimagem é os bytes que o banco retorna, através da consulta
assim que é o código:
private void jButtonSalvarImagemActionPerformed(java.awt.event.ActionEvent evt) {
byte[] byteImagem = null;
InputStream leitura = new ByteArrayInputStream(byteImagem);
try {
BufferedImage novaimagem = ImageIO.read(leitura);
jButtonSalvarImagem.setIcon(new ImageIcon(novaimagem));
} catch (IOException ex) {
}
}
mais ele esta dando esse erro:
Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at java.io.ByteArrayInputStream.(ByteArrayInputStream.java:106)
at telas.TelaMoradores.jButtonSalvarImagemActionPerformed(TelaMoradores.java:683)
at telas.TelaMoradores.access$800(TelaMoradores.java:26)
at telas.TelaMoradores$9.actionPerformed(TelaMoradores.java:239)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
esse código pra mim não deu , o que faço???
eu estou usando esse código:
pat.setBytes(8, mod.getImagem());
e no banco eu estou utilizando bytea que eu mandei a foto pra você ver
ok
aonde esta a seta minha eu não poderia usar porque eu tinha feito o código de adicionar olha:
private void jButtonAdicionarImagemActionPerformed(java.awt.event.ActionEvent evt) {
JFileChooser arquivo = new JFileChooser();
arquivo.setDialogTitle(“Selecione uma foto”);
arquivo.setFileSelectionMode(JFileChooser.FILES_ONLY);
int opc = arquivo.showOpenDialog(this);
if(opc == JFileChooser.APPROVE_OPTION){
File file = new File("caminho");
file = arquivo.getSelectedFile();
String filename = file.getAbsolutePath();
jTextFieldPath.setText(filename);
ImageIcon imagem = new ImageIcon(arquivo.getSelectedFile().getPath());
jLabelImagem.setIcon(new ImageIcon(imagem.getImage().getScaledInstance(jLabelImagem.getWidth(), jLabelImagem.getHeight(), Image.SCALE_DEFAULT)));
}
}
eu não poderia só fazer o botão de salvar imagem ???
você poderia explicar de uma outra forma não consegui entender.
Bom a forma que expliquei não específica o arquivo que recebe do gerenciador de arquivo.
O adiconar imagem e o salvar imagem seria a mesma coisa.
Ou só salvaria se fosse no salvar imagem
eu mudei o código para esse:
JFileChooser se = new JFileChooser();
se.setFileSelectionMode(JFileChooser.FILES_ONLY);
int estado = se.showOpenDialog(null);
if(estado == JFileChooser.APPROVE_OPTION){
try {
fis = new FileInputStream (se.getSelectedFile());
this.longitudBytes = (int) se.getSelectedFile().length();
Image icono = ImageIO.read(se.getSelectedFile()).getScaledInstance(jLabelImagem.getWidth(), jLabelImagem.getHeight(), Image.SCALE_DEFAULT);
jLabelImagem.setIcon(new ImageIcon(icono));
jLabelImagem.updateUI();
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex){
ex.printStackTrace();
}
}
e eu queria um código que ajudasse a colocar ele dentro do banco de dados.
Para lançar no banco precisa converter em array de bytes .
E eu preciso armazenar a imagem temporariamente para mandar para o banco. O que faço aqui:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(imagem,"JPEG",baos);
byteImagem=baos.toByteArray();
Bom se você quiser também permitir uma função para alterar a imagem você teria que verificar se a imagem é existente no banco
Bom poderia fazer só o botão salvar a imagem sim
eu estou usando esse site de base o que você acha?
https://respostas.guj.com.br/39233-como-salvaralterarler-uma-imagem-no-banco-de-dados
ele é bom ou você acha melhor não
Excelente agora entendi o que você queria fazer.
Sim é ótimo usar sites que quanto mais ajuda tiver melhor é
eu estou utilizando esse código:
private FileInputStream Imagem;
public FileInputStream getImagem() {
return Imagem;
}
public void setImagem(FileInputStream Imagem) {
this.Imagem = Imagem;
}
eu teria que usar o private byte[ ] Imagem; também.
Vou adaptar o meu código para o que você quer.E testar depois te falo
Sim pois o banco só seu só está aceitando os dados em bytes[]
ok fico na espera então…
oi você esqueceu de mim com código que você tinha prometido ontem???
Não é que estou fazendo um programa baseado na imagem que me mostrou