Upload de Arquivo Java Desktop(Resolvido)

18 respostas
java
D

Fiz um código para upload de arquivos em java
desktop mas está dando erro nesta linha
nao sei se esta certo para funcionar e depois ele pega e salvar no banco de dados

vou postar o código da tela produto

esta dando erro na linha

btnNewButton.addActionListener(new ActionListener() {

Código do upload de arquivo

btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(FileUploadEvent e) {
			try {
                Produto produto = new Produto();
				UploadedFile arquivoUpload = e.getFile();
				Path arquivoTemp = Files.createTempFile(null, null);
				Files.copy(arquivoUpload.getInputstream(), arquivoTemp, StandardCopyOption.REPLACE_EXISTING);
				produto.setCaminho(arquivoTemp.toString());

				System.out.println("Upload realizado com sucesso");
			} catch (IOException erro) {
				System.out.println("Ocorreu um erro ao tentar realizar o upload de arquivo");
				erro.printStackTrace();
			}
			}
		});

Código para savar no banco

btnSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {// GEN-FIRST:event_jButton1ActionPerformed
				// TODO add your handling code here:
				Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
				Transaction transacao = null;
				Produto produto = new Produto();

				try {
					if (produto.getCaminho() == null) {
						System.out.println("O campo foto é obrigatório");
						return;
					}
					Path origem = Paths.get(produto.getCaminho());
					Path destino = Paths.get("C:/Programacao/Uploads/" + produto.getCodigo() + ".png");
					try {
						Files.copy(origem, destino, StandardCopyOption.REPLACE_EXISTING);
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
					produto.setDescricao(textField.getText());
					produto.setQuantidade(Short.parseShort(textField_1.getText()));
					produto.setPreco(Double.parseDouble(textField_2.getText()));
					produto.setCaminho(textField_3.getText());
					Fabricante est = resultado.get(comboBox.getSelectedIndex());
					produto.setFabricante(est);
					System.out.println(est);
					transacao = sessao.beginTransaction();
					sessao.save(produto);
					transacao.commit();
					transacao = sessao.beginTransaction();
					sessao.save(produto);
					transacao.commit();
				} catch (RuntimeException erro) {
					if (transacao != null) {
						transacao.rollback();
					}
					throw erro;
				} finally {
					sessao.close();
				}
			}
		});
	}
}

18 Respostas

D

Olá.
Quando você cita “erro”, precisa informar qual erro, senão, ficamos perdidos.

D

Exception in thread “AWT-EventQueue-0” java.lang.Error: Unresolved compilation problem:
The type new ActionListener(){} must implement the inherited abstract method ActionListener.actionPerformed(ActionEvent)

at com.meson.sistemavendas.Tela.TelaProduto$2.actionPerformed(TelaProduto.java:174)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
D

so esse erro rsrs por enquanto rsrs acredito que não é actionlistener é outra coisa pra funcionar o botao de upload

D

primeira vez que uso upload rs

D

O problema está aqui.
O método actionPerformed aguarda um ActionEvent e não um FileUploadEvent.

D

a minha duvida é como que eu posso fazer para funcionar o botão de upload

nesse codigo aqui que seria o codigo do botao upload simples assim rs

try {
                Produto produto = new Produto();
    			UploadedFile arquivoUpload = e.getFile();
    			Path arquivoTemp = Files.createTempFile(null, null);
    			Files.copy(arquivoUpload.getInputstream(), arquivoTemp, StandardCopyOption.REPLACE_EXISTING);
    			produto.setCaminho(arquivoTemp.toString());

    			System.out.println("Upload realizado com sucesso");
    		} catch (IOException erro) {
    			System.out.println("Ocorreu um erro ao tentar realizar o upload de arquivo");
    			erro.printStackTrace();
    		}
D

Upload para desktop é meio estranho, afinal, o desktop é local…
Eu adicionaria um JFileChooser. Após o arquivo ser selecionado, processaria o mesmo para colocá-lo/copiá-lo para o local adequado (banco de dados, no caso).

D

Fiz um jfilechooser ele procura o arquivo adiciona a url ai clico em salvar e fica falando que o compo foto é obrigatorio e não salva nada… vou postar meu codigo salvar para voce ver

btnNewButton.addActionListener(new ActionListener() {       
            public void actionPerformed(ActionEvent e) {   
                JFileChooser chooser = new JFileChooser();   
                int returnVal = chooser.showOpenDialog(textField_3);   
                if(returnVal == JFileChooser.APPROVE_OPTION) {   
                    urlAnexo = chooser.getSelectedFile().getPath();   
                    textField_3.setText(urlAnexo);   
                }   
            }                   
        });

Meu salvar

btnSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {// GEN-FIRST:event_jButton1ActionPerformed
				// TODO add your handling code here:
				Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
				Transaction transacao = null;
				Produto produto = new Produto();

			try {
					if (produto.getCaminho() == null) {
						System.out.println("O campo foto é obrigatório");
						return;
					}
					Path origem = Paths.get(produto.getCaminho());
					Path destino = Paths.get("C:/Programacao/Uploads/" + produto.getCodigo() + ".png");
					try {
						Files.copy(origem, destino, StandardCopyOption.REPLACE_EXISTING);
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
					produto.setDescricao(textField.getText());
					produto.setQuantidade(Short.parseShort(textField_1.getText()));
					produto.setPreco(Double.parseDouble(textField_2.getText()));
					produto.setCaminho(textField_3.getText());
					Fabricante est = resultado.get(comboBox.getSelectedIndex());
					produto.setFabricante(est);
					System.out.println(est);
					transacao = sessao.beginTransaction();
					sessao.save(produto);
					transacao.commit();
					transacao = sessao.beginTransaction();
					sessao.save(produto);
					transacao.commit();
				} catch (RuntimeException erro) {
					if (transacao != null) {
						transacao.rollback();
					}
					throw erro;
				} finally {
					sessao.close();
				}
			}
		});
	}
}

como eu poderia fazer para salvar?

D

Eu não conheço tuas regras de negócio. Porém, esse trecho indica que, por alguma razão, o atributo caminho do objeto produto não foi definido. Isso causa o erro apresentado.

D

vou ver

D

Se eu puder sugerir algo, seria para você organizar melhor teus pensamentos e tua lógica.
Repare que, no modo anterior (o que dava erro na linha do actionPerformed), você instancia o produto e define qual seu caminho:

Produto produto = new Produto();
(...)
produto.setCaminho(arquivoTemp.toString());

Porém, na nova versão (funcional), não faz nada disso.
O que me leva a crer que você não está sabendo o que quer fazer, exatamente.

D

tirei esta linha só que ainda da erro

btnSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {// GEN-FIRST:event_jButton1ActionPerformed
				// TODO add your handling code here:
				Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
				Transaction transacao = null;
				Produto produto = new Produto();

			try {
					Path origem = Paths.get(produto.getCaminho());
					Path destino = Paths.get("C:/Programacao/Uploads/" + produto.getCodigo() + ".png");
					try {
						Files.copy(origem, destino, StandardCopyOption.REPLACE_EXISTING);
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
					produto.setDescricao(textField.getText());
					produto.setQuantidade(Short.parseShort(textField_1.getText()));
					produto.setPreco(Double.parseDouble(textField_2.getText()));
					produto.setCaminho(textField_3.getText());
					Fabricante est = resultado.get(comboBox.getSelectedIndex());
					produto.setFabricante(est);
					System.out.println(est);
					transacao = sessao.beginTransaction();
					sessao.save(produto);
					transacao.commit();
					transacao = sessao.beginTransaction();
					sessao.save(produto);
					transacao.commit();
				} catch (RuntimeException erro) {
					if (transacao != null) {
						transacao.rollback();
					}
					throw erro;
				} finally {
					sessao.close();
				}
			}
		});
	}
}

erro

Exception in thread AWT-EventQueue-0 java.lang.NullPointerException

at sun.nio.fs.WindowsPathParser.parse(Unknown Source)

at sun.nio.fs.WindowsPathParser.parse(Unknown Source)

at sun.nio.fs.WindowsPath.parse(Unknown Source)

at sun.nio.fs.WindowsFileSystem.getPath(Unknown Source)

at java.nio.file.Paths.get(Unknown Source)

at com.meson.sistemavendas.Tela.TelaProduto$3.actionPerformed(TelaProduto.java:194)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

at java.awt.Component.processMouseEvent(Unknown Source)

at javax.swing.JComponent.processMouseEvent(Unknown Source)

at java.awt.Component.processEvent(Unknown Source)

at java.awt.Container.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Window.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEventImpl(Unknown Source)

at java.awt.EventQueue.access$500(Unknown Source)

at java.awt.EventQueue$3.run(Unknown Source)

at java.awt.EventQueue$3.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)

at java.awt.EventQueue$4.run(Unknown Source)

at java.awt.EventQueue$4.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)
D

vou verificar depois

D

eu ja usei jfilechooser para anexar um anexo no email mas eu vou ver aqui na net alguns exemplos usando ele é que esse codigo era de um curso que fiz mas usei jsf

D

desisti do upload vou deixar por ultimo
tem bastante coisa pra fazer ainda rsrs
ai depois do mais uma pesquisada rs

D

Mas JSF não tem nada a ver com java desktop/swing.

Olha, @Dfodani, no meu ponto de vista, como comentei anteriormente, você está tentando desenvolver de forma desorganizada.
Veja que você pega um exemplo da internet, “bate” nele até funcionar, mas, não aplica da maneira como necessita.
Eu acredito que seja uma questão de lógica de programação, de organizar o que precisa e quando precisa. Entende?

D

sim mas é que estou tentando fazer a aplicação o mais simples possível sei que jsf nao tem a ver com desktop

eu tenho algumas aplicações aqui e reutilizo o código e as vezes não certo e venho perguntar aqui apenas isso

D

e vejo alguns exemplos na internet também e implemento no código e peço auxilio também pegar valores eu sei problema é que não prestei mta atenção no código do upload mas eu vou pesquisar mais pra analisar melhor o código é que ja tinha de uma aplicação que havia feito

Criado 2 de janeiro de 2020
Ultima resposta 3 de jan. de 2020
Respostas 18
Participantes 2