gpt4 book ai didi

java - 为什么这个程序会出现 ClassNotFound 异常?

转载 作者:行者123 更新时间:2023-12-01 07:32:23 27 4
gpt4 key购买 nike

我需要这个简单的虚拟银行程序在每次启动时反序列化主帐户。我已经这样做了,但是运行此方法的 GUI 类继续给我一个 java.lang.ClassNotFoundException 。我不确定我的错误是什么或如何修复它,我应该做什么?我将在下面发布这两个类,因为我不确定在哪里可以找到错误。

BankGUI 类:

package GUIs;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagLayout;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ListSelectionModel;
import javax.swing.ScrollPaneConstants;
import javax.swing.UIManager;

import virtualBank3.BankAccount;

@SuppressWarnings("serial")
public class BankGUI implements Serializable {

BankAccount account;

public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
BankGUI gui = new BankGUI();
gui.deserializeAccount();
gui.displayGUI();
}

// all global components for JFrame
JTextArea statusArea;
JCheckBox isLockedCheckBox;
JList depositAmount;
JList withdrawAmount;
JButton depositButton;
JButton withdrawButton;
JButton saveAccountButton;

private void displayGUI() {
JFrame frame = new JFrame("Virtual Bank v3.3");

Integer[] intList = { 1, 2, 5, 10, 20, 50, 100, 150, 250, 500 };

JPanel rightPanel = new JPanel();
rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.Y_AXIS));
rightPanel.setBackground(Color.GREEN);

JPanel centerPanel = new JPanel();
centerPanel.setBackground(Color.GREEN);
centerPanel.setLayout(new GridBagLayout());

frame.add(BorderLayout.CENTER, centerPanel);
frame.add(BorderLayout.EAST, rightPanel);

// add some JLabel's
JLabel depositAmountLabel = new JLabel("Deposit Amount:");
JLabel withdrawAmountLabel = new JLabel("Withdraw Amount:");
JLabel isLockedLabel = new JLabel("Lock account(True/False)");

// finish components(center panel)
statusArea = new JTextArea(15, 22);
statusArea.setEditable(false);
// add this to panel
isLockedCheckBox = new JCheckBox();
// add this to panel


// scrollers and Jlists
//***********************************************************************
depositAmount = new JList(intList);
JScrollPane scroller1 = new JScrollPane(depositAmount);
scroller1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scroller1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
depositAmount.setVisibleRowCount(1);
depositAmount.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);


withdrawAmount = new JList(intList);
JScrollPane scroller2 = new JScrollPane(depositAmount);
scroller2.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scroller2.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
depositAmount.setVisibleRowCount(1);
depositAmount.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//***********************************************************************

depositButton = new JButton("Deposit Amount.");
withdrawButton = new JButton("Withdraw Amount");
saveAccountButton = new JButton("Save your Account");

frame.setSize(425, 650);
frame.setVisible(true);
}

private void serializeAccount() {
try {
ObjectOutputStream objectStream1 = new ObjectOutputStream(
new FileOutputStream("bankAccounts.txt"));
objectStream1.writeObject(account);
objectStream1.close();
} catch (IOException e) {
e.printStackTrace();
}
}

private void deserializeAccount() {
try {
ObjectInputStream objectStream2 = new ObjectInputStream(
new FileInputStream("bankAccounts.txt"));
account = (BankAccount) objectStream2.readObject();
objectStream2.close();
//test it
System.out.println("It worked.");
} catch (Exception e) {
e.printStackTrace();
}
}
}

银行账户类:

package virtualBank3;

import java.io.Serializable;

public class BankAccount implements Serializable {

private static final long serialVersionUID = -5341449653011848470L;

int balance = 0;
int userWallet = 0;
String owner = "Hello, world";
String accountStat = "Account Owner: " + owner + "\nAccount balance: $"
+ balance + "\nOwner Wallet Balance: $" + userWallet;
Boolean isLocked = false;

public int withdraw(int amount) {
balance -= amount;
userWallet += amount;
return userWallet;
}

public int deposit(int amount) {
balance += amount;
userWallet -= amount;
return balance;
}

public int depositCashIntoWallet(int amount) {
userWallet += amount;
return userWallet;
}


}

错误如下:

java.lang.ClassNotFoundException: virtualBank3.Account
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at java.io.ObjectInputStream.resolveClass(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at GUIs.BankGUI.deserializeAccount(BankGUI.java:123)
at GUIs.BankGUI.main(BankGUI.java:40)

最佳答案

这是一个命名问题 - 您有一个公共(public)类 virtualBank3.BankAccount,但序列化文件引用了一个virtualBank3.Account。序列化文件是你写的还是别人给你的?如果是前者,您重命名了一个类,但没有重新创建序列化文件。

关于java - 为什么这个程序会出现 ClassNotFound 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16297064/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com