gpt4 book ai didi

java - 从 JAVA 程序使用 dcm4che 连接到 dcm4chee

转载 作者:搜寻专家 更新时间:2023-10-31 20:17:09 25 4
gpt4 key购买 nike

更新

我深入研究了 dcm4che 的源代码,发现如果有任何一种情况,都会抛出 IncompatibleConnectionException

  • 连接“未安装”
  • 或协议(protocol)类型未设置或不匹配。

我不知道“已安装”连接是什么意思,但可以手动设置此标志,因此我将本地和远程连接都设置为 true(甚至检查了它们使用 getInstalled() 它们是否“已安装” - 是的,它们现在是 - 以前此属性为 null)。

至于协议(protocol),它们没有指定,所以对于两个连接,我都将它们设置为 DICOM

结果:我仍然得到相同的异常。


我想在 dcm4chee 之间建立一个 DICOM 关联(2.18.3) 和我的 JAVA 应用程序使用 dcm4che (5.12.0) 工具包。

问题是它似乎没有任何关于如何在 JAVA 应用程序中使用 dcm4che 的文档,所以我所能做的就是阅读 dcm4che 的源代码并尝试弄清楚它的类和方法是做什么的,但我卡住了。如果有人已经有一个工作示例,那将非常有帮助。

到目前为止我有:

import org.dcm4che3.net.ApplicationEntity;
import org.dcm4che3.net.Association;
import org.dcm4che3.net.Connection;
import org.dcm4che3.net.Device;
import org.dcm4che3.net.pdu.AAssociateRQ;
import org.dcm4che3.net.pdu.PresentationContext;

...

ApplicationEntity locAE = new ApplicationEntity();
locAE.setAETitle("THIS_JAVA_APP");

Connection localConn = new Connection();
localConn.setCommonName("loc_conn");
localConn.setHostname("localhost");
localConn.setPort(11112);
localConn.setProtocol(Connection.Protocol.DICOM);
localConn.setInstalled(true);
locAE.addConnection(localConn);

ApplicationEntity remAE = new ApplicationEntity();
remAE.setAETitle("DCM4CHEE");

Connection remoteConn = new Connection();
remoteConn.setCommonName("rem_conn");
remoteConn.setHostname("localhost");
remoteConn.setPort(11112);
remoteConn.setProtocol(Connection.Protocol.DICOM);
remoteConn.setInstalled(true);
remAE.addConnection(remoteConn);

AAssociateRQ assocReq = new AAssociateRQ();
assocReq.setCalledAET(remAE.getAETitle());
assocReq.setCallingAET(locAE.getAETitle());
assocReq.setApplicationContext("1.2.840.10008.3.1.1.1");
assocReq.setImplClassUID("1.2.40.0.13.1.3");
assocReq.setImplVersionName("dcm4che-5.12.0");
assocReq.setMaxPDULength(16384);
assocReq.setMaxOpsInvoked(0);
assocReq.setMaxOpsPerformed(0);
assocReq.addPresentationContext(new PresentationContext(
1, "1.2.840.10008.1.1", "1.2.840.10008.1.2"));

Device device = new Device("device");
device.addConnection(localConn);
device.addApplicationEntity(locAE);

Association assoc = locAE.connect(remAE, assocReq);

但我不知道我是否走在正确的道路上。

我得到的错误:

org.dcm4che3.net.IncompatibleConnectionException: No compatible connection to DCM4CHEE available on THIS_JAVA_APP
at org.dcm4che3.net.ApplicationEntity.findCompatibelConnection(ApplicationEntity.java:646)
at org.dcm4che3.net.ApplicationEntity.connect(ApplicationEntity.java:651)

最佳答案

可能是您的设置中缺少 Device 实例?看来,您需要一个 Device,您将 ApplicationEntityConnection 附加到它。

查看FindSCU.java来源来自 dcm4che 来源。

private final Device device = new Device("findscu");
private final ApplicationEntity ae = new ApplicationEntity("FINDSCU");
private final Connection conn = new Connection();

public FindSCU() throws IOException {
device.addConnection(conn);
device.addApplicationEntity(ae);
ae.addConnection(conn);
}

我还认为,也许本地 Connection 对象可以在没有任何参数的情况下被实例化,如此处的 FindSCU 示例所示。也许参数以某种方式混淆了它,特别是考虑到您有指向 localhost:11112 的本地和远程连接。

但是,是的,必须承认,dcm4che3 API 的文档是完全不充分的。

关于java - 从 JAVA 程序使用 dcm4che 连接到 dcm4chee,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49048428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com