【问题标题】:Passing XML data into a file将 XML 数据传递到文件中
【发布时间】:2018-01-18 11:15:29
【问题描述】:

我有一个界面,可以同时并排播放两个视频,用户可以随时在上面显示的 3 个文本框中将 cmets 添加到视频中。我想要做的是将保存在这些框中的文本与时间戳一起保存。我有一个类来创建一个已保存的对象-单击保存按钮即可获取 3 个文本输入和视频的位置。我不确定的是一旦我将输入传回我的班级后如何保存。

这是我在单击按钮时调用类的代码:

Save.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent i) {

            Saved saved = new Saved();
            saved.setPosition(mediaPlayerComponent2.getMediaPlayer().getPosition() * 1000);
            saved.setGap(textArea.getText());
            saved.setForces(textArea1.getText());
            saved.setFindings(textArea2.getText());

            try {
                File file = new File("text.xml");
                JAXBContext jaxbContext = JAXBContext.newInstance(Saved.class);
                Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

                // output printed
                jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

                jaxbMarshaller.marshal(saved, file);
                jaxbMarshaller.marshal(saved, System.out);

            } catch (JAXBException e) {
                e.printStackTrace();
            }
        }

    });

这是我创建保存对象的类:

@XmlRootElement
public class Saved {
    float position;
    String gap;
    String forces;
    String findings;

    public float getPosition(){
        return position;
    }

    @XmlAttribute
    public void setPosition(float position){
        this.position = position;

    }

    public String getgap() {
    return gap;
}

@XmlElement
public void setGap(String gap) {
    this.gap = gap;
}

public String forces() {
    return forces;
}

@XmlElement
public void setForces(String forces) {
    this.forces = forces;
}

    public String findings() {
    return forces;
}

@XmlElement
public void setFindings(String findings) {
    this.findings = findings;
    }

}    

【问题讨论】:

  • 可能与jaxb-marshalling-java-to-output-xml-file 中的问题相同。创建一个 Marshaller 并将“已保存”流式传输到 File
  • 我刚刚尝试实现将其传递给文件,但出现以下错误:非静态内部类,而 JAXB 无法处理这些
  • @MarkHarrison 是 Saved 还是 inner class?比您需要将其声明为 static 或将其更改为“外部”类。
  • @devpuh 谢谢这是第一个错误 - 现在我得到了:该属性有一个 setter "public void doubleviewer.DoubleViewer$Saved.setFindings(java.lang.String)" 但没有 getter。对于 marshaller,请定义 getter。 - 我用新的动作处理程序代码更新了我的代码

标签: java xml


【解决方案1】:

基于 cmets:

首先,您尝试编组一个非静态内部类,这可以通过将其更改为静态嵌套类或“外部”类来解决。

然后 JAXB 无法识别 gapforcesfindings 的吸气剂。 所以将getgap()forces()findings 更改为getGap()getForces()getFindings()


还要注意findings() 返回forces 的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多