Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jesus Kleiton

EOFException

Recommended Posts

Ola dres.. estou eu a fazer um programa q grava em um arquivo de objetos.. mas quando tento gravar . aparece a seguinte mensagem.

 

java.io.EOFException
	at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
				at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
	at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
	at java.io.ObjectInputStream.<init>(Unknown Source)
	at com.restaurante.persistencia.GerenciadorArquivos.abrirArquivo(GerenciadorArquivos.java:49)
	at com.restaurante.persistencia.ClienteDAO.editarArquivo(ClienteDAO.java:56)
	at com.restaurante.persistencia.ClienteDAO.inserir(ClienteDAO.java:30)
	at com.restaurante.telas.CadastroCliente$2.actionPerformed(CadastroCliente.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.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)

Mas eu andei olhando varios metodos a fora.. e não parece constar nada anormal no metodo abaixo.

 

public static Object abrirArquivo(String nomearq) throws IOException, ClassNotFoundException {
		Object obj=null;
		File f = new File(nomearq);
		if (f.exists()) {
			FileInputStream in = new FileInputStream(f);
			ObjectInputStream sin = new ObjectInputStream(in);
			obj = sin.readObject();
			in.close();
		} else System.out.println("\nArquivo inexistente");
		return obj;
	}

O q eu posso ter feito de errado para não reconhecer o meu ObjectInputStream??

desde ja agradeço ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,qual é o valor que está entrando como nomearq?

 

Flwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, pelo nome que você fornece, acredito que o Java não está encontrando o arquivo, informe o nome completo do arquivo, exemplo: c:\cliente.dat para verificar se ocorre a excessão.

 

 

Flw, grande abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, pelo nome que você fornece, acredito que o Java não está encontrando o arquivo, informe o nome completo do arquivo, exemplo: c:\cliente.dat para verificar se ocorre a excessão.

 

 

Flw, grande abraço.

Não deu muito certo.. na verdade ele esta a reclamar dos seguinte metodos: (MARQUEI A LINHA COM COMENTARIO)

public static void editarArquivo(boolean eEditavel, Cliente novoCliente){
		ArrayList<Cliente> leitura;
		  int conta = 0;
		int indiceCliente = 0;
		try {
		if(GerenciadorArquivos.existeArquivo("c:\\cliente.dat")==true){

			// O ERRO COMEÇA NESSA LINHA ABAIXO!!!	  
 			
			leitura = ((ArrayList<Cliente>)GerenciadorArquivos.abrirArquivo("c:\\cliente.dat")); 
				
			  if(leitura!=null){	
				Iterator i = leitura.iterator();
				
				while(i.hasNext()){
					
					i.next();
					   if(leitura.get(indiceCliente++).equals(novoCliente)){
						   conta++;
						   break;

				   }
					   indiceCliente++;	 
				}
				if (conta>0){
					//constatou q o cara ja existe.
					if(eEditavel){
						leitura.remove(indiceCliente);
						leitura.add(novoCliente);
					}else{
					   JOptionPane.showMessageDialog(null, "Cliente ja esta cadastrado!!!");
					}
					//não consta no cadastro
				}else{
					leitura.add(novoCliente);
				}
			  }else{
				  leitura.add(novoCliente);
			  }
			  GerenciadorArquivos.salvarArquivo(leitura,"c:\\cliente.dat");
			
			
		}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

e esse outro q nada mais faz do q chamar o primeiro e criar o arquivo.. se preciso.

public void inserir(Object obj) {
		
		boolean x = GerenciadorArquivos.existeArquivo("c:\\cliente.dat");
		if(x){
			
			  
			  editarArquivo(eEdicao,(Cliente)obj);
		}else{
			try {
				GerenciadorArquivos.criarArquivo("c:\\cliente.dat");
				editarArquivo(eEdicao,(Cliente)obj);
			} catch (IOException e) {
				JOptionPane.showMessageDialog(null, "Não foi possivel criar o arquivo cliente.dat");
				e.printStackTrace();
			}
		}
	}

Fiz varios testes pesquisei em varios lugares mas não entendo pq ele acusa esses metodos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse arquivo dat suporta a escrita de objetos e esses objetos estão marcados como serializavéis?

 

Flwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse arquivo dat suporta a escrita de objetos e esses objetos estão marcados como serializavéis?

 

Flwww

Opa.. era isso. cliente não estava implementando a interface serializable.. obrigado.. mas agora estou com outra duvida..

ele esta gravando o Cliente no arquivo com todos os campos nulos, não importando o q eu coloque no cliente..

e nem desconfio pq.. aqui esta o metodo q grava o cliente.

 

public static void editarArquivo(boolean eEditavel, Cliente novoCliente){
		ArrayList<Cliente> leitura = null;
		  int conta = 0;
		int indiceCliente = 0;
		Cliente teste;
		File f = new File("c:\\cliente.dat");
		try {
		if(GerenciadorArquivos.existeArquivo("c:\\cliente.dat")==true){
				if(f.length()>0){
				  leitura = new ArrayList<Cliente>();	
				  leitura = ((ArrayList<Cliente>)GerenciadorArquivos.abrirArquivo("c:\\cliente.dat")); 
				  JOptionPane.showMessageDialog(null, leitura.get(0).getNome());
				}
			  if(leitura!=null){	
				Iterator i = leitura.iterator();
				
				while(i.hasNext()){
					JOptionPane.showMessageDialog(null, "ENTROU NO LAÇO");
					i.next();
					teste = (Cliente)leitura.get(indiceCliente);
					JOptionPane.showMessageDialog(null, teste.toString());
					   if(novoCliente.equals(teste)){
						   JOptionPane.showMessageDialog(null, "comparou");
						   conta++;
						   break;

				   }
					   indiceCliente++;	 
				}
				if (conta>0){
					//constatou q o cara ja existe.
					if(eEditavel){
						leitura.remove(indiceCliente);
						leitura.add(novoCliente);
					}else{
					   JOptionPane.showMessageDialog(null, "Cliente ja esta cadastrado!!!");
					}
					//não consta no cadastro
				}else{
					
					leitura.add(novoCliente);
				}
			  }else{
				  leitura = new ArrayList<Cliente>();
				  leitura.add(novoCliente);
			  }
			  GerenciadorArquivos.salvarArquivo((Object)leitura,"c:\\cliente.dat");
			
			
		}
		}catch(FileNotFoundException e){
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "arquivo nao encontrado");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

alguem ao menos desconfia o q pode estar ocorrendo??

Compartilhar este post


Link para o post
Compartilhar em outros sites

O objeto está sendo preenchido pelos métodos setters?

 

Flwww, grande abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.