2015-12-05 41 views
-1

我工作在Windows应用程序中的java:反序列化对象时的classnotfoundexception?

我只测试一个按钮,使功能登录我的系统:

我的按钮操作执行代码:

private void loginActionPerformed(java.awt.event.ActionEvent evt) {          
    if(emp.isSelected()) // get the selected radio button 
    { 
     Account a = new Account(); 
     Emp e = new Emp(); 
     a.setUsername(username.getText().toUpperCase()); 
     a.setPassword(password.getText().toUpperCase()); 
     e.login(a); 
     this.dispose(); 
    } 

    else if(supp.isSelected()) 
    { 
    } 

    else if(admin.isSelected()) 
    { 
     Account a = new Account(); 
     Admin m = new Admin(); 
     a.setUsername(username.getText().toUpperCase()); 
     a.setPassword(password.getText().toUpperCase()); 
     m.login(a); 
     this.dispose(); 
    } 

    else 
     JOptionPane.showMessageDialog(null, "Please select a choice", "Alert", JOptionPane.INFORMATION_MESSAGE); 
} 

功能登录代码:

public class Emp 
{ 

public void login(Account a) 
{ 
    boolean find = false; 
    ObjectInputStream in = null; 
    try { 
     in = new ObjectInputStream(new FileInputStream("C:\\Users\\فاطمة\\Downloads\\employees.bin")); 
     ArrayList<Account> b = (ArrayList)in.readObject(); 
     Iterator<Account> i = b.iterator(); 
     while(i.hasNext()) 
     { 
      Account ac = i.next(); 
      if(ac.getUsername().equals(a.getUsername()) && ac.getPassword().equals(a.getPassword())) 
      { 
       find = true; 
      } 
      else 
       JOptionPane.showMessageDialog(null, "Wrong username or password .. try again !!", "Login Failed",JOptionPane.ERROR_MESSAGE); 

     } 
     if(find) 
     { 
      JOptionPane.showMessageDialog(null, "Welcome " + a.getUsername(), "Login Success", JOptionPane.INFORMATION_MESSAGE); 
       emp_page e = new emp_page(); 
       e.setLocation(350, 150); 
       e.setSize(400, 490); 
       e.setTitle("Products Management"); 
       e.setVisible(true); 
     } 
    } catch (FileNotFoundException ex) { 
     //Logger.getLogger(Emp.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IOException | ClassNotFoundException ex) { 
     //Logger.getLogger(Emp.class.getName()).log(Level.SEVERE, null, ex); 
    } finally { 
     try { 
      in.close(); 
     } catch (IOException ex) { 
      //Logger.getLogger(Emp.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 
} 

账户类代码:

import java.io.Serializable; 

public class Account implements Serializable{ 

private String username; 
private String password; 

public String getUsername() { 
    return username; 
} 

public void setUsername(String username) { 
    this.username = username; 
} 

public String getPassword() { 
    return password; 
} 

public void setPassword(String password) { 
    this.password = password; 
} 
} 

我有一个问题:我收到错误:

java.lang.classnotfoundexcetpion:Account 

,寻找错误原因后,我发现,序列化是不使用的,因为我在另一个函数之前测试此代码引发此错误的问题序列化和完美的工作。

所以我的问题是:如何解决这个错误?

注意:我的应用程序不是客户端服务器应用程序......所以没有创建两个项目......只有一个。

+0

这两个不同的应用程序?并且其他应用程序是否具有“Account”类? – vlatkozelka

+0

这是客户端服务器应用程序吗?如果是这种情况,请注意包名**在服务器和客户端上必须相等。 – Cyclonecode

+2

http://stackoverflow.com/questions/2916107/readobject-method-throws-classnotfoundexception – Cyclonecode

回答

1

这个长时间的讨论:

ClassNotFoundException when deserializing a binary class file's contents

ClassNotFoundException during Deserialization of a just-serializaed class

Java SerialIzation: 'ClassNotFoundException' when deserializing an Object

3建议:

  • 一定要放在私有静态最后长的serialver sionUID = XXX;

  • 一定要踏上你的类在classpath /罐

  • 力可以在代码与客户交流=新帐户(); //看看这里是否有问题

它有帮助吗?

+0

这几乎没有资格作为答案。唯一相关的位是第二个项目符号点。 – EJP

+0

@EJP没有一个连接的讨论给出了肯定的答案,只列出了症状,可能的原因和对策,我​​继续。如果它存在一个可靠的解决方案,那将是一大步,不是吗? –