2015-12-05 76 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沒有一個連接的討論給出了肯定的答案,只列出了症狀,可能的原因和對策,我​​繼續。如果它存在一個可靠的解決方案,那將是一大步,不是嗎? –