我正在面对我的学校项目的问题,这段代码完美无缺:
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();
它给我带来了一个错误:
mars 21,2017 7:25:02 PM protocole.MinLLPReader getMessage GRAVE:null java.net.SocketException:连接重置为 java.net.SocketInputStream.read(SocketInputStream.java:209)at java.net.SocketInputStream.read(SocketInputStream.java:141)at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)at java.io.InputStreamReader.read(InputStreamReader.java:184)at java.io.BufferedReader.fill(BufferedReader.java:161)at java.io.BufferedReader.readLine(BufferedReader.java:324)at java.io.BufferedReader.readLine(BufferedReader.java:389)at protocole.MinLLPReader.getMessage(MinLLPReader.java:50)at library.interfaces.ServeurHL7.protocole(ServeurHL7.java:84)at interoperabilite.Serveur。(Serveur.java:28)at interoperabilite.TestHL7Serveur.lambda $主$ 0(TestHL7Serveur.java:24) 在java.lang.Thread.run(Thread.java:745)
线程中的异常&#34;线程0&#34; java.lang.NullPointerException at protocole.MinLLPReader.getMessage(MinLLPReader.java:56)at at library.interfaces.ServeurHL7.protocole(ServeurHL7.java:84)at interoperabilite.Serveur。(Serveur.java:28)at interoperabilite.TestHL7Serveur.lambda $主$ 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消息时运行服务器代码,而另一台计算机运行客户端代码来传输此消息。
答案 0 :(得分:0)
我找到的临时解决方案:
对于客户端我添加一个无限的线程,它工作,仍然未知原因。我明天会看得更远:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package interoperabilite;
import api.Parser;
import db.GestionnaireDB.DAOFactory;
import java.util.ArrayList;
import java.util.Arrays;
import library.interfaces.Patient;
import nf.DPI.DPI;
/**
*
* @author quentin
*/
public class TestHL7Client {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
String adresse = "localhost"; //adresse du serveur à joindre
int port = 6565; //port d'écoute du serveur
new Thread(() -> {
while(true){
}
}).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("---------------------------------------");
}
}
并且服务器部分仍然是:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package interoperabilite;
import api.Parser;
import library.interfaces.Patient;
/**
*
* @author quentin
*/
public class TestHL7Serveur {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int port = 6565;//port d'écoute de mon serveur
new Thread(() -> {
Serveur serveur = new Serveur(port);
Patient ps;
System.out.println("TestHL7Serveur");
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();
}
}
客户端发送:
-----------testConnexion------------
PV1: PV1||Inpatient|^^^^^^^^|||^^^^^^^^||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---------------------------------------
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 22:08:52 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
date de naissanceWed Oct 21 22:08:52 CET 1970
TestHL7Serveur
---------------------------------------
messageHL7final : // HL7 message:
MSH|^~\&|||||20170321220852+0100||ADT^A01|-1254244946|P|2.5||||||||||
EVN|A01|20170321220852+0100|||||
PID|1||170000001||Angélique^Guille||19701021220852+0100|F|||||||||||||||||||||N||||||||||||||||||||||
PV1||Inpatient|^^^^^^^^|||^^^^^^^^||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---------------------------------------
year:null
month:null
day:null
hour:null
minutes:null
seconde:null
---------------------------------------
parser :
Mon Nov 21 22:08:52 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 22:08:52 CET 1970
---------------------------------------
我认为我会从服务器向客户端发回一条消息,以阻止无限循环,因为它以这种方式工作。
我将使用最小的完整和可验证的更新,但它很棘手,因为我们使用编译的API。如果有人知道为什么使用无限循环+线程这项工作请解释我:)