Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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中的XMLEndcoder在xml文件中使用数据编写JTable状态_Java_Swing_Jtable_Xmlencoder - Fatal编程技术网

如何使用java中的XMLEndcoder在xml文件中使用数据编写JTable状态

如何使用java中的XMLEndcoder在xml文件中使用数据编写JTable状态,java,swing,jtable,xmlencoder,Java,Swing,Jtable,Xmlencoder,我想使用xmlcoder将JTable保存在xml文件中。 当我们将其保存到文件中时,会出现异常: java.lang.InstantiationException: javax.swing.plaf.basic.BasicTableUI$Handler Continuing ... java.lang.Exception: XMLEncoder: discarding statement ColorPropertyTable.removeMouseMotionListener(BasicTab

我想使用
xmlcoder
JTable
保存在xml文件中。 当我们将其保存到文件中时,会出现异常:

java.lang.InstantiationException: javax.swing.plaf.basic.BasicTableUI$Handler
Continuing ...
java.lang.Exception: XMLEncoder: discarding statement ColorPropertyTable.removeMouseMotionListener(BasicTableUI$Handler);
Continuing ...


注册异常通知
XMLEncoder和XMLDecoder都捕获异常,并且通常能够从异常中恢复,从而允许写入或读取不受异常影响的存档部分。通过注册ExceptionListener,您可以了解编码和解码过程中引发的任何异常的更多信息,如下所示:
...

范例

import java.awt.*;
导入java.awt.event.*;
导入java.beans。*;
导入java.io.*;
导入java.util.Vector;
导入javax.swing.*;
导入javax.swing.table.*;
公共类DefaultTableModelPersistenceDelegateTest{
私有最终JTextArea textArea=新JTextArea();
私有最终字符串[]columnNames={“A”,“B”};
私有最终对象[][]数据={
{“aaa”、“CCCCC”}、{“bbb”、“\u2600\u2601\u2602\u2603”}
};
private DefaultTableModel=new DefaultTableModel(数据、列名);
专用最终JTable表=新JTable(模型);
公共JComponent makeUI(){
JSplitPane sp=新JSplitPane(JSplitPane.垂直拆分);
sp.setResizeWeight(.5);
sp.setTopComponent(新JScrollPane(表));
sp.setBottomComponent(新JScrollPane(textArea));
JPanel p=新的JPanel();
p、 添加(新的JButton(新的AbstractAction(“XMLEncoder”){
@覆盖已执行的公共无效操作(ActionEvent e){
试一试{
File File=File.createTempFile(“output”、“.xml”);
try(OutputStream os=new BufferedOutputStream(new FileOutputStream(file))){
XMLEncoder xe=新的XMLEncoder(os);
xe.setPersistenceDelegate(
DefaultTableModel.class,新的DefaultTableModelPersistenceDelegate());
//setExceptionListener(新的ExceptionListener(){
//@Override public void exceptionThrown(异常){
////XXX:exception.printStackTrace();
//              }
//          });
//xe.writeObject(表);
xe.writeObject(模型);
//xe.flush();
xe.close();
}
try(读卡器r=新的BufferedReader(
新的InputStreamReader(新文件InputStream(文件),“UTF-8”)){
文本区域。读取(r,“温度”);
}
}捕获(IOEX异常){
例如printStackTrace();
}
}
}));
p、 添加(新的JButton(新的AbstractAction(“XMLDecoder”){
@覆盖已执行的公共无效操作(ActionEvent e){
try(InputStream=newbufferedinputstream(
新建ByteArrayInputStream(textArea.getText().getBytes(“UTF-8”)){
XMLDecoder xd=新的XMLDecoder(is);
model=(DefaultTableModel)xd.readObject();
表2.setModel(model);
}捕获(IOEX异常){
例如printStackTrace();
}
}
}));
p、 添加(新JButton(新抽象操作(“清除”){
@覆盖已执行的公共无效操作(ActionEvent e){
模型=新的DefaultTableModel();
表2.setModel(model);
}
}));
JPanel pnl=newjpanel(newborderlayout());
pnl.add(sp);
pnl.add(p,南部边界布局);
返回pnl;
}
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
@重写公共无效运行(){
createAndShowGUI();
}
});
}
公共静态void createAndShowGUI(){
JFrame f=新的JFrame();
f、 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f、 getContentPane().add(新的DefaultTableModelPersistenceDelegateTest().makeUI());
f、 设置大小(320240);
f、 setLocationRelativeTo(空);
f、 setVisible(真);
}
}
//http://web.archive.org/web/20090806075316/http://java.sun.com/products/jfc/tsc/articles/persistence4/
//http://www.oracle.com/technetwork/java/persistence4-140124.html
类DefaultTableModelPersistenceDelegate扩展了DefaultPersistenceDelegate{
@重写受保护的无效初始化(
类类型、对象oldInstance、对象newInstance、编码器){
初始化(类型、旧实例、新实例、编码器);
DefaultTableModel m=(DefaultTableModel)oldInstance;
//向量v=m.getDataVector();
//对于(int i=0;i


注册异常通知
XMLEncoder和XMLDecoder都捕获异常,并且通常能够从异常中恢复,从而允许写入或读取不受异常影响的存档部分。通过注册ExceptionListener,您可以了解编码和解码过程中引发的任何异常的更多信息,如下所示:
...

范例

import java.awt.*;
导入java.awt.event.*;
导入java.beans。*;
导入java.io.*;
导入java.util.Vector;
导入javax.swing.*;
导入javax.swing.table.*;
公共类DefaultTableModelPersistenceDelegateTest{
私有最终JTextArea textArea=新JTextArea();
私有最终字符串[]columnNames={“A”,“B”};
私有最终对象[][]数据={
{“aaa”、“CCCCC”}、{“bbb”、“\u2600\u2601\u2602\u2603”}
};
private DefaultTableModel=new DefaultTableModel(数据、列名);
专用最终JTable表=新JTable(模型);
公共JComponent makeUI(){
JSplitPane sp=新JSplitPane(JSplitPane.垂直拆分);
sp.setResizeWeight(.5);
s
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.io.*;
import java.util.Vector;
import javax.swing.*;
import javax.swing.table.*;

public class DefaultTableModelPersistenceDelegateTest {
  private final JTextArea textArea = new JTextArea();

  private final String[] columnNames = {"A", "B"};
  private final Object[][] data = {
    {"aaa", "ccccccc"}, {"bbb", "\u2600\u2601\u2602\u2603"}
  };
  private DefaultTableModel model = new DefaultTableModel(data, columnNames);
  private final JTable table = new JTable(model);

  public JComponent makeUI() {
    JSplitPane sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
    sp.setResizeWeight(.5);
    sp.setTopComponent(new JScrollPane(table));
    sp.setBottomComponent(new JScrollPane(textArea));

    JPanel p = new JPanel();
    p.add(new JButton(new AbstractAction("XMLEncoder") {
      @Override public void actionPerformed(ActionEvent e) {
        try {
          File file = File.createTempFile("output", ".xml");
          try (OutputStream os = new BufferedOutputStream(new FileOutputStream(file))) {
            XMLEncoder xe = new XMLEncoder(os);
            xe.setPersistenceDelegate(
                DefaultTableModel.class, new DefaultTableModelPersistenceDelegate());
//          xe.setExceptionListener(new ExceptionListener() {
//              @Override public void exceptionThrown(Exception exception) {
//                  //XXX: exception.printStackTrace();
//              }
//          });
//          xe.writeObject(table);
            xe.writeObject(model);
            //xe.flush();
            xe.close();
          }
          try (Reader r = new BufferedReader(
              new InputStreamReader(new FileInputStream(file), "UTF-8"))) {
            textArea.read(r, "temp");
          }
        } catch (IOException ex) {
          ex.printStackTrace();
        }
      }
    }));
    p.add(new JButton(new AbstractAction("XMLDecoder") {
      @Override public void actionPerformed(ActionEvent e) {
        try (InputStream is = new BufferedInputStream(
            new ByteArrayInputStream(textArea.getText().getBytes("UTF-8")))) {
          XMLDecoder xd = new XMLDecoder(is);
          model = (DefaultTableModel) xd.readObject();
          table.setModel(model);
        } catch (IOException ex) {
          ex.printStackTrace();
        }
      }
    }));
    p.add(new JButton(new AbstractAction("clear") {
      @Override public void actionPerformed(ActionEvent e) {
        model = new DefaultTableModel();
        table.setModel(model);
      }
    }));

    JPanel pnl = new JPanel(new BorderLayout());
    pnl.add(sp);
    pnl.add(p, BorderLayout.SOUTH);
    return pnl;
  }
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      @Override public void run() {
        createAndShowGUI();
      }
    });
  }
  public static void createAndShowGUI() {
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.getContentPane().add(new DefaultTableModelPersistenceDelegateTest().makeUI());
    f.setSize(320, 240);
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }
}
//http://web.archive.org/web/20090806075316/http://java.sun.com/products/jfc/tsc/articles/persistence4/
//http://www.oracle.com/technetwork/java/persistence4-140124.html
class DefaultTableModelPersistenceDelegate extends DefaultPersistenceDelegate {
  @Override protected void initialize(
      Class<?> type, Object oldInstance, Object newInstance, Encoder encoder) {
    super.initialize(type, oldInstance,  newInstance, encoder);
    DefaultTableModel m = (DefaultTableModel) oldInstance;
//         Vector v = m.getDataVector();
//         for (int i = 0; i < m.getRowCount(); i++) {
//             encoder.writeStatement(
//               new Statement(oldInstance, "addRow", new Object[] { (Vector) v.get(i) }));
//         }
    for (int row = 0; row < m.getRowCount(); row++) {
      for (int col = 0; col < m.getColumnCount(); col++) {
        Object[] o = new Object[] {m.getValueAt(row, col), row, col};
        encoder.writeStatement(new Statement(oldInstance, "setValueAt", o));
      }
    }
  }
}
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.io.*;
import java.util.Vector;
import javax.swing.*;
import javax.swing.table.*;

public class DefaultTableModelPersistenceDelegateTest
{
    private File file = new File("TableModel.xml");
    private final JTextArea textArea = new JTextArea();

    private final String[] columnNames = {"Column1", "Column2"};

    private final Object[][] data =
    {
        {"aaa", new Integer(1)},
        {"bbb\u2600", new Integer(2)}
    };

    private DefaultTableModel model = new DefaultTableModel(data, columnNames);
    private final JTable table = new JTable(model);

    public JComponent makeUI()
    {
        model.setColumnCount(5);
        JSplitPane sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
        sp.setResizeWeight(.3);
        sp.setTopComponent(new JScrollPane(table));
        sp.setBottomComponent(new JScrollPane(textArea));

        JPanel p = new JPanel();
        p.add(new JButton(new AbstractAction("XMLEncoder")
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                try
                {
                    OutputStream os = new BufferedOutputStream(new FileOutputStream(file));
                    XMLEncoder xe = new XMLEncoder(os);
                    xe.setPersistenceDelegate(DefaultTableModel.class, new DefaultTableModelPersistenceDelegate2());
                    xe.writeObject(model);
                    xe.close();

                    Reader r = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
                    textArea.read(r, null);
                }
                catch (IOException ex)
                {
                    ex.printStackTrace();
                }
            }
        }));

        p.add(new JButton(new AbstractAction("XMLDecoder")
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                try
                {
                    InputStream is = new BufferedInputStream( new FileInputStream( file ));
                    XMLDecoder xd = new XMLDecoder(is);
                    model = (DefaultTableModel)xd.readObject();
                    table.setModel(model);
                }
                catch (IOException ex)
                {
                    ex.printStackTrace();
                }
            }
        }));

        p.add(new JButton(new AbstractAction("clear")
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                model = new DefaultTableModel();
                table.setModel(model);
            }
        }));

        JPanel pnl = new JPanel(new BorderLayout());
        pnl.add(sp);
        pnl.add(p, BorderLayout.SOUTH);
        return pnl;
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            @Override public void run()
            {
                createAndShowGUI();
            }
        });
    }

    public static void createAndShowGUI()
    {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.getContentPane().add(new DefaultTableModelPersistenceDelegateTest().makeUI());
        f.setSize(420, 340);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }
}

//http://www.oracle.com/technetwork/java/persistence4-140124.html

class DefaultTableModelPersistenceDelegate extends DefaultPersistenceDelegate
{
    //  Initially creates an empty DefaultTableModel. The columns are created
    //  and finally each row of data is added to the model.

    @Override
    protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder encoder)
    {
        DefaultTableModel model= (DefaultTableModel)oldInstance;

        Vector<String> columnNames = new Vector<String>(model.getColumnCount());

        for (int i = 0; i < model.getColumnCount(); i++)
        {
            columnNames.add( model.getColumnName(i) );
        }

        Object[] columnNamesData = new Object[] { columnNames };
        encoder.writeStatement(new Statement(oldInstance, "setColumnIdentifiers", columnNamesData));

        Vector row = model.getDataVector();

        for (int i = 0; i < model.getRowCount(); i++)
        {
            Object[] rowData = new Object[] { row.get(i) };
            encoder.writeStatement(new Statement(oldInstance, "addRow", rowData));
        }
    }
}