Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ObjectOutput/InputStream打开/保存SWT文本对象_Java_Swt - Fatal编程技术网

Java 使用ObjectOutput/InputStream打开/保存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()

我正在尝试使用ObjectOutputStream从SWT打开/保存一个文本对象。但它不起作用。有人有主意吗,为什么

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
。SWT
Text
类没有实现这一点


SWT
Text
类包含各种依赖于本机UI代码的对象,无法再次保存和加载这些对象。

请告诉我们运行此代码时会发生什么情况是否足够,或者您需要更多信息?您建议我怎么做?是否还有另一种保存/加载的可能性?解释为什么要保存文本对象,像这样保存UI控件是不寻常的。我必须用SWT编写一个小编辑器,当我要保存文件时,它应该保存文本、颜色、字体等。。当我用同样的编辑器打开一个文件时……你必须从控件中提取所有信息,并将其保存为你发明的某种格式。可能是使用DataOutputStream。所以我获取所有我想要的信息,将其放入字符串并写入文件?以同样的方式从文件中加载信息并将其放入文本对象中?