基于XML的桌面应用的代码详细介绍
更新时间:2023-12-06概述
XML是一种被广泛应用于数据存储和传输的语言标准。基于XML的桌面应用,通常使用Java开发,可以从外部源(如Web服务器)获取数据,随后将其解析为XML文件类型,然后使用Java编写的GUI(图形用户界面)将这些数据呈现给用户。
public static void main(String args[]) { // 1. 在 GUI 上创建一个文本框和按钮 JTextField userText = new JTextField(); JButton sendButton = new JButton("发送"); // 2. 添加 action listener,当用户点击按钮时执行 sendButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // 3. 从文本框中获取数据 String message = userText.getText(); // 4. 将数据转换为 XML 文件类型 String xml = "<?xml version='1.0' encoding='UTF-8'?>" + message + " "; // 5. 将 XML 文件发送到服务器 sendMessage(xml); } }); }
将XML解析为Java对象
在基于XML的桌面应用中,我们常常需要将XML数据解析为Java对象以在GUI上呈现。使用Java的DOM API或JAXB API可以轻松地实现这一目标。
// 示例使用JAXB API将XML解析为Java对象 public class Message { private String message; // 省略 getter 和 setter 方法 public static void main(String args[]) { String xml = "<?xml version='1.0' encoding='UTF-8'?>你好 "; // 1. 创建 JAXB 上下文,用于处理 XML 数据 JAXBContext jaxbContext = JAXBContext.newInstance(Message.class); // 2. 使用上下文创建 Unmarshaller 对象,它将把 XML 数据解析为 Java 对象 Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); // 3. 将 XML 数据解析为 Java 对象 Message message = (Message) unmarshaller.unmarshal(new StringReader(xml)); // 4. 在 GUI 上展示 Java 对象的值 System.out.println(message.getMessage()); } }
使用XML与Web服务器通信
基于XML的桌面应用可以通过互联网与 Web 服务器通信,从而获取和更新数据。这需要使用Java的网络编程API(如Java.net包)来建立服务器连接和处理数据传输。
public class Client { // 示范的服务器地址和端口号 private static final String SERVER_ADDRESS = "localhost"; private static final int PORT = 8080; public static void main(String[] args) { try { // 1. 建立服务器连接 Socket clientSocket = new Socket(SERVER_ADDRESS, PORT); // 2. 从服务器获取数据 BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String serverData = inFromServer.readLine(); // 3. 使用 XML 将数据解析为 Java 对象 JAXBContext jaxbContext = JAXBContext.newInstance(Message.class); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); Message message = (Message) unmarshaller.unmarshal(new StringReader(serverData)); System.out.println(message.getMessage()); // 4. 向服务器发送数据 PrintWriter outToServer = new PrintWriter(clientSocket.getOutputStream()); String xml = "<?xml version='1.0' encoding='UTF-8'?>Hello from client! "; outToServer.println(xml); outToServer.flush(); clientSocket.close(); } catch (IOException | JAXBException e) { e.printStackTrace(); } } }
生成XML文件
在基于XML的桌面应用中,我们有时需要将Java对象转换为XML文件类型以进行存储或传输。使用Java的DOM API或StAX API可以轻松地生成XML文件。
// 示例使用DOM API生成XML文件 public class Message { private String message; // 省略 getter 和 setter 方法 public static void main(String args[]) throws ParserConfigurationException, TransformerException { // 1. 创建 DocumentBuilder 对象,用于创建 DOM 树 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); // 2. 创建 Document 对象,即根元素 Document document = builder.newDocument(); Element rootElement = document.createElement("message"); document.appendChild(rootElement); // 3. 添加子元素和数据 Element messageElement = document.createElement("text"); messageElement.appendChild(document.createTextNode("你好")); rootElement.appendChild(messageElement); // 4. 将 DOM 树保存为 XML 文件 DOMSource domSource = new DOMSource(document); StreamResult streamResult = new StreamResult(new File("message.xml")); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.transform(domSource, streamResult); } }