Java 使用ObjectOutput/InputStream打开/保存SWT文本对象
我正在尝试使用ObjectOutputStream从SWT打开/保存一个文本对象。但它不起作用。有人有主意吗,为什么Java 使用ObjectOutput/InputStream打开/保存SWT文本对象,java,swt,Java,Swt,我正在尝试使用ObjectOutputStream从SWT打开/保存一个文本对象。但它不起作用。有人有主意吗,为什么 public static void read(String fileName, Text textField) { int c=0; try { ObjectInputStream in = new ObjectInputStream(new FileInputStream(fileName)); c= in.readInt()
public static void read(String fileName, Text textField) {
int c=0;
try {
ObjectInputStream in = new ObjectInputStream(new FileInputStream(fileName));
c= in.readInt();
textField = (Text) in.readObject();
in.close();
}
catch(IOException e){
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void write(String fileName, Text textField) {
int c = 1;
try {
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(fileName));
out.writeInt(c);
out.writeObject((Text)textField);
out.close();
}
catch(IOException e){
e.printStackTrace();
}
}
保存时控制台上出现的错误:
java.io.NotSerializableException: org.eclipse.swt.widgets.Text
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at FileIO.write(FileIO.java:42)
at SelectionAdapterSave.widgetSelected(SelectionAdapterSave.java:29)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4170)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3759)
at Editor.open(Editor.java:230)
at EditorMain.main(EditorMain.java:6)
当我尝试打开文件时,我以前保存的内容如下:
Caused by: java.io.NotSerializableException: org.eclipse.swt.widgets.Text
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at FileIO.write(FileIO.java:42)
at SelectionAdapterSave.widgetSelected(SelectionAdapterSave.java:29)
... 7 more
只能在实现可序列化的对象上使用
ObjectOutputStream
。SWTText
类没有实现这一点
SWT
Text
类包含各种依赖于本机UI代码的对象,无法再次保存和加载这些对象。请告诉我们运行此代码时会发生什么情况是否足够,或者您需要更多信息?您建议我怎么做?是否还有另一种保存/加载的可能性?解释为什么要保存文本对象,像这样保存UI控件是不寻常的。我必须用SWT编写一个小编辑器,当我要保存文件时,它应该保存文本、颜色、字体等。。当我用同样的编辑器打开一个文件时……你必须从控件中提取所有信息,并将其保存为你发明的某种格式。可能是使用DataOutputStream。所以我获取所有我想要的信息,将其放入字符串并写入文件?以同样的方式从文件中加载信息并将其放入文本对象中?