【发布时间】:2017-08-13 15:20:25
【问题描述】:
我的学校项目遇到问题,这段代码运行良好:
String adresse = "localhost";
int port = 6565;
new Thread(() -> {
Serveur serveur = new Serveur(port);
Patient ps;
String messageHL7 = serveur.getMessageHL7();
String messageHL7final = serveur.getMessageHL7lisible();
System.out.println("---------------------------------------");
System.out.println("messageHL7final : ");
System.out.println(messageHL7final);
System.out.println("---------------------------------------");
ps = serveur.getPs();
Parser parse = new Parser(messageHL7);
System.out.println("---------------------------------------");
System.out.println("parser : ");
System.out.println(parse.getPatient().getBirth());
System.out.println("---------------------------------------");
serveur.fermeture();
System.out.println("---------------------------------------");
System.out.println("Patient serveur nom de famille : " + ps.getFamillyName());
System.out.println("Patient serveur prénom : " + ps.getFirstName());
System.out.println("Patient serveur IPP : " + ps.getID());
System.out.println("Patient serveur est mort : " + ps.isDeath());
System.out.println("Patient serveur sexe : " + ps.getCharSex());
System.out.println("Patient serveur date de naissance : " + ps.getBirth());
System.out.println("---------------------------------------");
}).start();
DPI dpi = DAOFactory.getDpiDAO().find(new ArrayList<>(Arrays.asList("IPP")), new ArrayList<>(Arrays.asList("170000001")));
Client client = new Client(dpi, adresse, port);
System.out.println("---------------------------------------");
System.out.println("Patient de la base de donnée: " + dpi.toString());
System.out.println("---------------------------------------");
System.out.println("---------------------------------------");
System.out.println("test : ");
Patient p = client.getP();
System.out.println("---------------------------------------");
System.out.println("---------------------------------------");
System.out.println("Patient client nom de famille : " + p.getFamillyName()
+ "\nPatient client prénom : " + p.getFirstName()
+ "\nPatient client sexe : " + p.getCharSex()
+ "\nPatient client date de naissance : " + p.getBirth()
+ "\nPatient clientIPP : " + p.getID()
+ "\nPatient client est mort : " + p.isDeath()
+ "\nPatient client date de décès : " + p.getDeath()
+ "\nPatient client est parti le : " + p.getDateDicharge());
System.out.println("---------------------------------------");
给我这个回复:
---------------------------------------
Patient de la base de donnée: Guille Angélique, FEMME, né(e) le 1970-10-21 IPP : 170000001
---------------------------------------
---------------------------------------
test :
---------------------------------------
---------------------------------------
Patient client nom de famille : Angélique
Patient client prénom : Guille
Patient client sexe : F
Patient client date de naissance : Wed Oct 21 19:20:13 CET 1970
Patient clientIPP : 170000001
Patient client est mort : false
Patient client date de décès : null
Patient client est parti le : null
---------------------------------------
year:null
month:null
day:null
hour:null
minutes:null
seconde:null
-------------apresProtocole-----------------
date de naissanceWed Oct 21 19:20:13 CET 1970
---------------------------------------
messageHL7final :
MSH|^~\&|||||20170321192013+0100||ADT^A01|1525900894|P|2.5||||||||||
EVN|A01|20170321192013+0100|||||
PID|1||170000001||Angélique^Guille||19701021192013+0100|F|||||||||||||||||||||N||||||||||||||||||||||
PV1||Inpatient|^^^^^^^^|||^^^^^^^^||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---------------------------------------
year:null
month:null
day:null
hour:null
minutes:null
seconde:null
---------------------------------------
parser :
Mon Nov 21 19:20:13 CET 3870
---------------------------------------
---------------------------------------
Patient serveur nom de famille : Angélique
Patient serveur prénom : Guille
Patient serveur IPP : 170000001
Patient serveur est mort : false
Patient serveur sexe : F
Patient serveur date de naissance : Wed Oct 21 19:20:13 CET 1970
---------------------------------------
但是当我尝试分解服务器和客户端时(我删除了sout):
服务器可运行:
int port = 6565;//port d'écoute de mon serveur
new Thread(() -> {
Serveur serveur = new Serveur(port);
Patient ps;
String messageHL7 = serveur.getMessageHL7();
String messageHL7final = serveur.getMessageHL7lisible();
ps = serveur.getPs();
Parser parse = new Parser(messageHL7);
}).start();
和客户端可运行:
String adresse = "localhost"; //adresse du serveur à joindre
int port = 6565; //port d'écoute du serveur
DPI dpi = DAOFactory.getDpiDAO().find(new ArrayList<>(Arrays.asList("IPP")), new ArrayList<>(Arrays.asList("170000001")));
Client client = new Client(dpi, adresse, port);
Patient p = client.getP();
它给我带来了一个错误:
2017 年 3 月 21 日 7:25:02 PM protocole.MinLLPReader getMessage GRAVE: null java.net.SocketException:连接重置在 java.net.SocketInputStream.read(SocketInputStream.java:209) 在 java.net.SocketInputStream.read(SocketInputStream.java:141) 在 sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284) 在 sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326) 在 sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) 在 java.io.InputStreamReader.read(InputStreamReader.java:184) 在 java.io.BufferedReader.fill(BufferedReader.java:161) 在 java.io.BufferedReader.readLine(BufferedReader.java:324) 在 java.io.BufferedReader.readLine(BufferedReader.java:389) 在 protocole.MinLLPReader.getMessage(MinLLPReader.java:50) 在 library.interfaces.ServeurHL7.protocole(ServeurHL7.java:84) 在 互操作性.Serveur.(Serveur.java:28) 在 interoperabilite.TestHL7Serveur.lambda$main$0(TestHL7Serveur.java:24) 在 java.lang.Thread.run(Thread.java:745)
线程“Thread-0”中的异常 java.lang.NullPointerException at protocole.MinLLPReader.getMessage(MinLLPReader.java:56) 在 library.interfaces.ServeurHL7.protocole(ServeurHL7.java:84) 在 互操作性.Serveur.(Serveur.java:28) 在 interoperabilite.TestHL7Serveur.lambda$main$0(TestHL7Serveur.java:24) 在 java.lang.Thread.run(Thread.java:745)
因此,在此之后,我在互联网上寻求帮助,但没有找到与我相近的案例。 困扰我的是,当他们在一起时它会起作用,但如果我把它们分开,它就不起作用了。
我看了这个帖子: communication between run() method and other class method (java threads) 因此这个解释 http://javarevisited.blogspot.fr/2012/07/countdownlatch-example-in-java.html 但没有得到解释。而且我什至不知道这是否相似,因为最终目标是一台计算机在需要接收 HL7 消息时运行服务器代码,而另一台计算机运行客户端代码来传输此消息。
【问题讨论】:
-
如果您只运行服务器而不运行客户端,它是否
sout患者详细信息?或者,如果两者都运行,但删除服务器线程中除Serveur serveur = new Serveur(port);之外的所有代码,它是否有效? -
尝试将您的输入过大减少为 true minimal reproducible example;顺便说一句:然后将该代码翻译成英文。将大大提高您获得答案的机会。
标签: java multithreading