gpt4 book ai didi

java - 无法加载已保存的 JButton

转载 作者:行者123 更新时间:2023-12-01 13:27:34 25 4
gpt4 key购买 nike

我正在编写一个程序,将 JButton 数组保存到文件 .btn 中。这是正在保存的代码:

package avtech.software.compunav;

import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

import javax.swing.JButton;

public class Buttons implements Serializable {
public static Button[] buttons = new Button[15];

public Buttons() {
for (int i = 0; i < buttons.length; i++) {
buttons[i] = new Button();
buttons[i].setText("Unassigned");
}
}

public JButton[] getButtons() {
return buttons;
}

public JButton getButton(int index) {
return buttons[index];
}

public void setButtonText(String txt, int index) {
buttons[index].setText(txt);
}

public void setButtonAction(String action, int index) {

}

public void save() {
try {
File dir = new File(Core.baseDir + "/bin/buttons.btn");

FileOutputStream fos = new FileOutputStream(dir);
ObjectOutputStream oos = new ObjectOutputStream(fos);

if (dir.exists())
dir.delete();

oos.writeObject(this);

oos.flush();
oos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

Button 是一个扩展 JButton 的类,代码如下:

 package avtech.software.compunav;

import java.awt.Desktop;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;

import javax.swing.JButton;

import CompuNav.main.Dialogs;

public class Button extends JButton implements ActionListener {

private String action = "";

public Button() {
addActionListener(this);
}

public void setAction(String s) {
action = s;
}

@Override
public void actionPerformed(ActionEvent arg0) {
if (action.equals(""))
return;

File file = new File(action);
Desktop dt = Desktop.getDesktop();

try {
dt.open(file);
} catch (IOException e1) {
Dialogs.msg("Could not open " + action);
}
}

}

基本上,代码正在保存。正确的目录中有一个名为 Buttons.btn 的文件。问题是,当我在这里使用 load 方法时:

 try {
FileInputStream fis = new FileInputStream(baseDir
+ "/bin/buttons.btn");
ObjectInputStream ois = new ObjectInputStream(fis);

buttonsClass = (Buttons) ois.readObject();

ois.close();
} catch (Exception e) {}

创建新的 Button 对象并保存后,尝试调用 buttonsClass.getButton(0); 时出现 nullPointerException,这意味着当我保存类时 JButton 未保存.

有什么原因吗?知道如何解决这个问题吗?

最佳答案

public static Button[] buttons = new Button[15];

如果您希望序列化该变量,则该变量不应是静态的。

关于java - 无法加载已保存的 JButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21736293/

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