【发布时间】:2018-05-22 19:06:07
【问题描述】:
您好,我正在开发一个摇摆聊天应用程序,其中聊天历史存储在一个 xml 文件中。 在 NetBeans 项目中完成后,我能够获取 xml 文件并将其显示在表格中
但是当转换为 jar 文件时,我无法使用 xml 文件。 我尝试了各种方法,例如 getClass().getResource() 方法,但它检索的是 URL 而不是字符串,如果使用 toString() 方法转换为字符串,它不能用作有效路径来解析xml 文件。
下面是代码-->
ServerFrame.java
public class ServerFrame extends javax.swing.JFrame {
public String historyFile;
public HistoryFrame historyFrame;
public History hist; }
public ServerFrame() {
historyFile=this.getClass().getResource("History.xml").toString();}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
hist = new History(historyFile);
historyFrame = new HistoryFrame(hist);
historyFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
historyFrame.setLocation(this.getLocation());
historyFrame.setVisible(true);
}
History.java
public class History {
public String filePath;
public History(String filePath){
this.filePath = filePath;
}
public void addMessage(Message msg, String time){
try {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(filePath);
Node data = doc.getFirstChild();
Element message = doc.createElement("message");
Element _sender = doc.createElement("sender"); _sender.setTextContent(msg.sender);
Element _content = doc.createElement("content"); _content.setTextContent(msg.content);
Element _recipient = doc.createElement("recipient"); _recipient.setTextContent(msg.recipient);
Element _time = doc.createElement("time"); _time.setTextContent(time);
message.appendChild(_sender); message.appendChild(_content); message.appendChild(_recipient); message.appendChild(_time);
data.appendChild(message);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(filePath));
transformer.transform(source, result);
}
catch(Exception ex){
System.out.println("Exceptionmodify xml");
}
}
public void FillTable(HistoryFrame frame){
DefaultTableModel model = (DefaultTableModel) frame.jTable1.getModel();
try{
File fXmlFile = new File(filePath);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName("message");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
model.addRow(new Object[]{getTagValue("sender", eElement), getTagValue("content", eElement), getTagValue("recipient", eElement), getTagValue("time", eElement)});
}
}
}
catch(Exception ex){
System.out.println("Filling Exception");
}
}
我已将 xml 文件放在项目目录的 src 文件夹中。问题似乎出在 docBuilder.parse() 中,因为每次在函数中生成异常并且它只接受字符串而不是 url,因为系统路径文件的路径与文件的 javapath 不同。
我只需要在执行期间以某种方式访问 jar 中的 xml 文件。访问是指jar文件中xml文件的正确文件路径,不需要文件内容。
【问题讨论】:
标签: java xml swing netbeans jar