首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >“[致命错误] :1:120:不允许与"[xX][mM][lL]”匹配的处理指令目标。“

“[致命错误] :1:120:不允许与"[xX][mM][lL]”匹配的处理指令目标。“
EN

Stack Overflow用户
提问于 2010-11-21 01:41:03
回答 8查看 58.1K关注 0票数 24

这是一个对你来说很难的问题。

我正在做一个班级项目,其中我创建了一个点对点聊天程序,我遇到了这个问题:

当我打开一个聊天窗口时,没有问题。当我打开第二个窗口并尝试登录聊天时,我收到以下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
**[Fatal Error] :1:120: The processing instruction target matching "[xX][mM][lL]" is not allowed.
org.xml.sax.SAXParseException: The processing instruction target matching "[xX][mM][lL]" is not allowed.
        at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:249)
        at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
        at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:124)
        at chatter2.Chatter.process(Chatter.java:240)
        at chatter2.Chatter.run(Chatter.java:222)
        at java.lang.Thread.run(Thread.java:680)**

我非常确定这与我的代码如何为参与者创建XML有关。

下面是我写的所有代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * NewJFrame.java
 *
 * Created on Nov 10, 2010, 2:11:39 PM
 */
package chatter2;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StringBufferInputStream;
import java.io.StringReader;
import java.net.Socket;
import java.util.LinkedList;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.InputSource;

/**
 *
 * @author ericrea
 */
public class Chatter extends javax.swing.JFrame implements Runnable {

    PrintWriter out = null;
    BufferedReader in = null;
    boolean running = true;
    String partName = "";
    String chatHist = "";

    /** Creates new form NewJFrame */
    public Chatter() {
        initComponents();
        Server server = new Server();
        server.start();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        msgText = new javax.swing.JTextArea();
        send = new javax.swing.JButton();
        jPanel2 = new javax.swing.JPanel();
        chatText = new javax.swing.JTextArea();
        jPanel3 = new javax.swing.JPanel();
        userName = new javax.swing.JTextField();
        IPaddress = new javax.swing.JTextField();
        PortField = new javax.swing.JTextField();
        Login = new javax.swing.JButton();
        jButton1 = new javax.swing.JButton();
        jPanel4 = new javax.swing.JPanel();
        chatMembers = new javax.swing.JList();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setMinimumSize(new java.awt.Dimension(550, 550));

        jPanel1.setLayout(new java.awt.GridLayout(1, 0));

        msgText.setColumns(20);
        msgText.setRows(5);
        msgText.setPreferredSize(new java.awt.Dimension(240, 24));
        msgText.setRequestFocusEnabled(false);
        jPanel1.add(msgText);

        send.setText("Send");
        send.setPreferredSize(new java.awt.Dimension(100, 29));
        send.setRolloverEnabled(true);
        send.setSelected(true);
        send.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                sendActionPerformed(evt);
            }
        });
        jPanel1.add(send);

        getContentPane().add(jPanel1, java.awt.BorderLayout.PAGE_END);

        jPanel2.setLayout(new java.awt.GridLayout(1, 0));

        chatText.setBackground(new java.awt.Color(0, 255, 204));
        chatText.setColumns(20);
        chatText.setRows(5);
        jPanel2.add(chatText);

        getContentPane().add(jPanel2, java.awt.BorderLayout.LINE_END);

        jPanel3.setLayout(new java.awt.GridLayout(1, 0));

        userName.setText("UserName");
        jPanel3.add(userName);

        IPaddress.setText("127.0.0.1");
        IPaddress.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                IPaddressActionPerformed(evt);
            }
        });
        jPanel3.add(IPaddress);

        PortField.setText("44640");
        jPanel3.add(PortField);

        Login.setText("Login");
        Login.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                LoginActionPerformed(evt);
            }
        });
        jPanel3.add(Login);

        jButton1.setText("Logout");
        jPanel3.add(jButton1);

        getContentPane().add(jPanel3, java.awt.BorderLayout.PAGE_START);

        chatMembers.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        chatMembers.setModel(new javax.swing.AbstractListModel() {
            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
            public int getSize() { return strings.length; }
            public Object getElementAt(int i) { return strings[i]; }
        });
        chatMembers.setPreferredSize(new java.awt.Dimension(80, 87));
        jPanel4.add(chatMembers);

        getContentPane().add(jPanel4, java.awt.BorderLayout.LINE_START);

        pack();
    }// </editor-fold>                        

    private void LoginActionPerformed(java.awt.event.ActionEvent evt) {                                      

        try {
            Socket s = new Socket(IPaddress.getText(), Integer.parseInt(PortField.getText()));
            out = new PrintWriter(s.getOutputStream());
            in = new BufferedReader(new InputStreamReader(s.getInputStream()));
            new Thread(this).start();
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = factory.newDocumentBuilder();
            Document doc = docBuilder.newDocument();
            Element root = doc.createElement("login");
            doc.appendChild(root);
            root.appendChild(doc.createTextNode(userName.getText()));

            TransformerFactory fact = TransformerFactory.newInstance();
            Transformer trans = fact.newTransformer();
            DOMSource source = new DOMSource(doc);
            StreamResult sResult = new StreamResult(out);
            trans.transform(source, sResult);
            out.println("\n");

            out.flush();
        } catch (Exception e) {
        }
    }                                     

    private void IPaddressActionPerformed(java.awt.event.ActionEvent evt) {                                          
        // TODO add your handling code here:
    }                                         

    private void sendActionPerformed(java.awt.event.ActionEvent evt) {                                     

    }                                    

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new Chatter().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                     
    private javax.swing.JTextField IPaddress;
    private javax.swing.JButton Login;
    private javax.swing.JTextField PortField;
    private javax.swing.JList chatMembers;
    private javax.swing.JTextArea chatText;
    private javax.swing.JButton jButton1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JTextArea msgText;
    private javax.swing.JButton send;
    private javax.swing.JTextField userName;
    // End of variables declaration                   

    public void run() {

        String buffer = "";
        while (running) {
            try {

                String line = in.readLine();
                System.out.println(line);

                if (line.equals("")) {

                    process(buffer);
                } else {

                    buffer = buffer + line;
                }
            } catch (Exception e) {
            }

        }
    }

    public void process(String buffer) {

        try {

            System.out.println("buffer in process is " + buffer);
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = factory.newDocumentBuilder();
            Document doc = docBuilder.parse(new StringBufferInputStream(buffer)); //new InputSource(new StringReader(buffer))
            Element root = doc.getDocumentElement();



            if (root.getNodeName().equals("message")) {
                chatHist = chatHist + root.getTextContent() + "\n";
                newMessage();

            }
            else if (root.getNodeName().equals("participants")) {
                DefaultListModel partNames = new DefaultListModel(); 
                for(int i = 0; i < root.getChildNodes().getLength(); i++){
                     //partName = partName + root.getChildNodes().item(i).getTextContent() + "/n";
                     partNames.addElement(root.getChildNodes().item(i).getTextContent());

                }
                chatMembers.setModel(partNames);

            }

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





    }

    public void cleanStop() {
    }

    public void newMessage() {
        chatText.setText(chatHist);
    }
}


    /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package chatter2;


import java.io.*;
import java.net.*;
import java.util.LinkedList;
import java.util.List;
import org.w3c.dom.Document;


/**
 *
 * @author ericrea
 */
public class Server extends Thread {

    private ServerSocket ss = null;
    private List<Participant> parts = new LinkedList<Participant>();

    public Server(){
        try{
        ss = new ServerSocket(44640);
        }catch(Exception e){e.printStackTrace();
        }

    }

    @Override
    public void run() {

      //add this into a while loop
            while (true){
                 try{
            Socket s = ss.accept();
            Participant p = new Participant(this, s);
            p.start();
            getParts().add(p);
            }
            catch(Exception e){
            e.printStackTrace();}





//            System.out.println(" Got a client socket connection");
//            PrintWriter out =  new PrintWriter(s.getOutputStream());
//            BufferedReader in =  new BufferedReader(new InputStreamReader(s.getInputStream()));
//            out.println("hey there, want to chat");
//            out.flush();
//            String line = in.readLine();
//            System.out.println("Client said: " + line);


        }

    }
    public void message(Document doc){
        for (Participant p: getParts()){
            p.newMessage(doc);
        }
    }

    public void newParticipants(){
       int counter = 1;
        for(Participant p: getParts()){
            //System.out.println(counter + " time through the loop");
            counter++;
            p.newParticipant();
        }


    }

    public void cleanStop(){

    }
    public void logout(Participant p){
        parts.remove(p);
        newParticipants();
    }

    /**
     * @return the ss
     */
    public ServerSocket getSs() {
        return ss;
    }

    /**
     * @param ss the ss to set
     */
    public void setSs(ServerSocket ss) {
        this.ss = ss;
    }

    /**
     * @return the parts
     */
    public List<Participant> getParts() {
        return parts;
    }

    /**
     * @param parts the parts to set
     */
    public void setParts(List<Participant> parts) {
        this.parts = parts;
    }

}


    /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package chatter2;

import java.io.*;
import java.util.*;
import java.net.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.InputSource;

/**
 *
 * @author ericrea
 */
public class Participant extends Thread {

    Server server = null;
    Socket client = null;
    PrintWriter out = null;
    BufferedReader in = null;
    boolean running = true;
    private String partName = null;

    public Participant(Server server, Socket client) throws IOException {
        this.client = client;
        this.server = server;
        out = new PrintWriter(client.getOutputStream());
        in = new BufferedReader(new InputStreamReader(client.getInputStream()));
    }

    //run and actONMessage will be in the chatter class as well
    @Override
    public void run() {


            String buffer = "";
            while (running) {
                try {
                    String line = in.readLine();

                    if (line.equals("")) {

                        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                        DocumentBuilder docBuilder = factory.newDocumentBuilder();
                        Document doc = docBuilder.parse(new InputSource(new StringReader(buffer)));
                        actOnMessage(doc);
                    } else {
                        buffer = buffer + line;
                    }

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

    }

    public void actOnMessage(Document doc) {

        Element root = doc.getDocumentElement();


        if (root.getNodeName().equals("login")) {
            setPartName(root.getTextContent());

            this.login();
        } else if (root.getNodeName().equals("message")) {
            message(doc);
        } else if (root.getNodeName().equals("logout")) {
            this.logout();
        }

    }

    public void message(Document doc) {
        server.message(doc);

    }

    public void login() {
        server.newParticipants();
    }

    public void logout() {
        server.logout(this);
    }

    public void newMessage(Document doc) {
        out.println(/*String version of the xml*/);
    }

    public void newParticipant() {
        try {

            List<Participant> partList = server.getParts();

            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder docBuilder = factory.newDocumentBuilder();
            Document doc = docBuilder.newDocument();
            Element root = doc.createElement("participants");
            doc.appendChild(root);

            for (Participant k : partList) {
                Element root1 = doc.createElement("participant");
                root.appendChild(root1);
                root1.appendChild(doc.createTextNode(k.getPartName()));

            }

            TransformerFactory fact = TransformerFactory.newInstance();
            Transformer trans = fact.newTransformer();
            DOMSource source = new DOMSource(doc);
            StreamResult sResult = new StreamResult(out);
            trans.transform(source, sResult);
            out.println("\n");

            out.flush();
        } catch (Exception e) {
        }
    }

    public void cleanStop() {
    }

    public void getParticipantName() {
    }

    /**
     * @return the partName
     */
    public String getPartName() {
        return partName;
    }

    /**
     * @param partName the partName to set
     */
    public void setPartName(String partName) {
        this.partName = partName;
    }
}
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-12-07 04:09:07

我想通了。我需要在创建每个新参与者后清除缓冲区。啊!

谢谢你的帮助!!

票数 2
EN

Stack Overflow用户

发布于 2010-11-21 02:12:33

问题是前面有多个XML头或noise。

XML文档的典型开头是...

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version='1.0'?>

看起来像PI,但不是。如果你有一个额外的,或者如果你之前有一个BOM以外的任何东西,那就是你会得到的错误。

票数 43
EN

Stack Overflow用户

发布于 2012-10-26 16:55:34

在weblogic上部署spring webapp时,我遇到了类似的问题。在xml文件中,第一行是空白的。这会导致XML解析失败,并显示此错误。删除这个后,它起作用了!希望对其他人也是有用的信息。:)

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4235991

复制
相关文章
python dropwhile跳过开头的几行
from itertools import dropwhile with open('/etc/passwd') as f: ... for line in dropwhile(lambda line: line.startswith('#'), f): ... print(line, end='') from itertools import islice items = ['a', 'b', 'c', 1, 4, 10, 15] for x in
用户5760343
2019/09/30
1.7K0
pythoncharm注释快捷键_多行注释以什么开头
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/174489.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
1.6K0
pythoncharm注释快捷键_多行注释以什么开头
为什么浏览器的用户代理字符串以 Mozilla 开头?
为什么浏览器的用户代理字符串(user-agent string)以 Mozilla 开头? 最早流行的浏览器是 NCSA Mosaic,它称自己为 NCSA_Mosaic/2.0 (Windows
前端教程
2018/03/29
1.4K0
为什么浏览器的用户代理字符串以 Mozilla 开头?
在文件每一行开头增加字符串
首先,使用vim 打开某txt文件,输入冒号,并输入%s/^/,之后输入要添加的字符串即可
DoubleV
2022/03/25
1.1K0
python字符串匹配开头_对python 匹配字符串开头和结尾的方法详解
1、你需要通过指定的文本模式去检查字符串的开头或者结尾,比如文件名后缀,URL Scheme 等等。检 查 字 符 串 开 头 或 结 尾 的 一 个 简 单 方 法 是 使 用str.startswith() 或 者 是str.endswith()方法。比如:
全栈程序员站长
2022/09/13
2.8K0
原理分析:使用 dd 跳过开头若干字节快速拷贝文件
  计算机中每一次向硬盘读取和写入数据,无论读多小的数据量,都至少需要花一段常数时间(称为overhead)。 (就像你去超市买鸡蛋一样,无论你一次只买一个,还是一千个,你都至少要花从家走到超市,再从超市走回家的时间。)
Miigon
2022/10/27
1.2K0
ES6字符串模板多行清除行头空格制表符
对于多行文本我肯定优先考虑用 ES6字符串模板来实现,直接使用的效果并不是很符合想要的。
CRPER
2019/11/29
1K0
php用空格分隔字符串,分割字符串空格[通俗易懂]
String[] data = s.split(“@”); // 以@分割字符串,获得@后的值。
全栈程序员站长
2022/11/16
6.3K0
Java 多行字符串
在本文中,我们来说说 Java 的多行字符串(multiline strings )。
HoneyMoose
2022/08/08
4.2K0
Java 多行字符串
python 字符串开头结尾匹配
filename = 'spam.txt' filename.endswith('.txt') True filename.startswith('file:') False url = 'http://www.python.org' url.startswith('http:') True 或者正则 import re url = 'http://www.python.org' re.match('http:|https:|ftp:', url) <_sre.SRE_Mat
用户5760343
2022/01/10
1.7K0
php删除字符串的空格
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/105882.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/09
3.6K0
字符串:替换空格
示例 1: 输入:s = "We are happy." 输出:"We%20are%20happy."
代码随想录
2020/09/10
4.6K0
字符串:替换空格
带空格的字符串反转
就是输入一段文本,然后让你实现字符串反转。 肺炎严重,假期延长,闲的不得不自主学习,然后就日常刷水题。 第一次的方法,简单易懂,就是时间超限了。TLIM #include<bits/stdc++.h> using namespace std; stack<string> st; int main(){ string s; cin>>s; reverse(s.begin(),s.end()); st.push(s); while(getchar() != '\n'){ cin>>s; re
杨鹏伟
2020/09/11
1.3K0
JS去除字符串的空格
JS去除字符串前后空格 //去前后空格 //var LO = data.replace(/(^\s*)|(\s*$)/g, ""); //var LA = data.replace(/(^\s*)|(\s*$)/g, ""); JS去除字符串所有空格 //直接去除所有的空格 var LL = data.replace(/\s+/g,""); 在Kettle做数据清洗中用到的: //Script here //去前后空格 //var LO = LONGITUDE.replace(/(^\s*)|(\s*
手撕代码八百里
2020/07/28
8K0
python 匹配字符串开头和结尾
1.你需要通过指定的文本模式去检查字符串的开头或者结尾,比如文件名后缀,URL Scheme 等等。检 查 字 符 串 开 头 或 结 尾 的 一 个 简 单 方 法 是 使 用str.startswith() 或 者 是str.endswith()方法。比如:
全栈程序员站长
2022/09/16
1.3K0
算法-字符串替换空格
chaibubble
2018/01/02
2.4K0
算法-字符串替换空格
android空格字符串_v1d空格复制
&#160; == &nbsp; == &#xA0; == no-break space (普通的英文半角空格但不换行)
全栈程序员站长
2022/09/30
8240
关于字符串切割空格
注意: 不要在split方法中写" ", 这样只能匹配到一个空格 String s = "hello world you"; String[] split = s.split("\\s+"); for (String s1 : split) { System.out.println(s1); }
乐心湖
2020/07/31
1.1K0
python 字符串去空格
1、lstrip:删除左边的空格 这个字符串方法,会删除字符串s开始位置前的空格。
全栈程序员站长
2022/09/03
2.6K0
Python字符串开头或末尾匹配
当你需要通过指定的文本模式去检查字符串的开头或者结尾的时候,比如文件名后缀,URL Scheme等等。
后场技术
2020/09/03
1.8K0

相似问题

在多行开头添加空格

443

sscanf跳过开头的空格

10

匹配以空格开头的多行

12

删除多行字符串变量中每一行开头的空格。

55

字符串开头的跳过模式

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文