Can';t使用domainCreateXML或domainDefineXML函数在java中创建新域

Can';t使用domainCreateXML或domainDefineXML函数在java中创建新域,java,libvirt,Java,Libvirt,当我编写java项目时,我发现无法使用libvirt正确创建域。它引发异常“qemu-system-x86_64:未能在`127.0.0.1:4101上启动VNC服务器”:绑定套接字失败:地址已在使用中”,但我不使用“4101”端口 系统信息: #系统中心7 $uname-a Linux bogon 3.10.0-957.27.2.el7.x86_64#1 SMP周一至七月29日17:46:05 UTC 2019年x86_64 x86_64 GNU/Linux $rpm-ql libvirt j

当我编写java项目时,我发现无法使用libvirt正确创建域。它引发异常“qemu-system-x86_64:未能在`127.0.0.1:4101上启动VNC服务器”:绑定套接字失败:地址已在使用中”,但我不使用“4101”端口

系统信息:

#系统中心7
$uname-a
Linux bogon 3.10.0-957.27.2.el7.x86_64#1 SMP周一至七月29日17:46:05 UTC 2019年x86_64 x86_64 GNU/Linux
$rpm-ql libvirt java
/usr/share/doc/libvirt-java-0.4.9
/usr/share/doc/libvirt-java-0.4.9/AUTHORS
/usr/share/doc/libvirt-java-0.4.9/INSTALL
/usr/share/doc/libvirt-java-0.4.9/license
/usr/share/doc/libvirt-java-0.4.9/NEWS
/usr/share/doc/libvirt-java-0.4.9/README
/usr/share/java/libvirt-0.4.9.jar
/usr/share/java/libvirt.jar
$java-版本
openjdk版本“1.8.0_222”
OpenJDK运行时环境(build 1.8.0_222-b10)
OpenJDK 64位服务器虚拟机(构建25.222-b10,混合模式)
异常消息:

libvirt: QEMU Driver 错误 : 内部错误:process exited while connecting to monitor: 
(process:5178): GLib-WARNING **: 08:32:41.803: gmem.c:489: custom memory allocation vtable not supported
2019-09-12T00:32:41.839117Z qemu-system-x86_64: Failed to start VNC server on `127.0.0.1:4101': Failed to bind socket: Address already in use
Exception in thread "main" org.libvirt.LibvirtException: 内部错误:process exited while connecting to monitor: 
(process:5178): GLib-WARNING **: 08:32:41.803: gmem.c:489: custom memory allocation vtable not supported
2019-09-12T00:32:41.839117Z qemu-system-x86_64: Failed to start VNC server on `127.0.0.1:4101': Failed to bind socket: Address already in use
    at org.libvirt.ErrorHandler.processError(Unknown Source)
    at org.libvirt.Connect.processError(Unknown Source)
    at org.libvirt.Connect.domainCreateXML(Unknown Source)
    at open.main(open.java:20)
测试代码:

公共类连接器{
静态连接;
公共静态连接getConnection(){
试一试{
连接=新连接(“qemu:///system");
}捕获(libvirtexe){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回连接;
}
}
公共类虚拟管理服务{
Connect=null;
//创建,加载镜像也是这个函数只是cfg不同而已
公共布尔域创建(字符串cfg)抛出LibvirtException{
//创建一个领域
布尔状态=假;
试一试{
connect=VirConnector.getConnection();
connect.domainCreateXML(cfg,0);
状态=真;
}捕获(libvirtexe){
e、 printStackTrace();
}
返回状态;
}
公共布尔域Active(字符串名称)引发LibvirtException{
//创建一个领域
布尔状态=假;
试一试{
connect=VirConnector.getConnection();
Domain Domain=connect.domainLookupByName(名称);
int num=domain.isActive();
如果(num==0){
domain.create();
状态=真;
}否则{
状态=真;
}
}捕获(libvirtexe){
e、 printStackTrace();
}
返回状态;
}
//删除
公共布尔域删除(字符串名称)引发LibvirtException{
试一试{
connect=VirConnector.getConnection();
Domain Domain=connect.domainLookupByName(名称);
domain.destroy();
}最后{
}
返回true;
}
//创建存储池
公共布尔存储池创建(字符串cfg){
布尔状态=假;
StoragePool-StoragePool=null;
试一试{
//创建存储池
connect=VirConnector.getConnection();
storagePool=connect.storagePoolDefineXML(cfg,0);
//激活
创建(0);
//设置自动启动
storagePool.setAutostart(0);
状态=真;
}捕获(libvirtexe){
e、 printStackTrace();
}
返回状态;
}
//销毁存储池
公共布尔storagePoolDelete(字符串名称)引发LibvirtException{
布尔状态=假;
StoragePool-StoragePool=null;
试一试{
//查找存储池
connect=VirConnector.getConnection();
storagePool=connect.storagePoolLookupByName(名称);
//销毁对象
storagePool.destroy();
//清除定义
取消定义();
状态=真;
}捕获(libvirtexe){
e、 printStackTrace();
}
返回状态;
}
//创建分卷
公共布尔volumeCreate(字符串poolName、字符串cfg){
布尔状态=假;
StoragePool-StoragePool=null;
StorageVol-StorageVol=null;
试一试{
//查找存储池
connect=VirConnector.getConnection();
storagePool=connect.storagePoolLookupByName(池名);
//创建分卷
storageVolCreateXML(cfg,0);
状态=真;
}捕获(libvirtexe){
e、 printStackTrace();
}
返回状态;
}
//删除分卷
公共布尔volumeDelete(字符串池名、字符串卷名){
布尔状态=假;
StoragePool-StoragePool=null;
StorageVol-StorageVol=null;
试一试{
//查找存储池
connect=VirConnector.getConnection();
storagePool=connect.storagePoolLookupByName(池名);
//查找分卷
storageVol=storagePool.storageVolLookupByName(volName);
//清空分卷数据
storageVol.wipe();
//删除分卷
存储卷删除(0);
状态=真;
}捕获(libvirtexe){
e、 printStackTrace();
}
返回状态;
}
//分卷迁移
公共布尔volumeMove(String poolNameSrc、String volNameSrc、String poolNameDesc、String cfg)抛出LibvirtException{
布尔状态=假;
StoragePool storagePoolSrc=null;
StoragePool storagePoolDesc=null;
StorageVol storageVolSrc=null;
试一试{
//查找存储池
connect=VirConnector.getConnection();
storagePoolSrc=connect.storagePoolLookupByName(poolNameSrc);
//查找待迁移的分卷
storageVolSrc=storagePoolSrc.storageVolLookupByName(volNameSrc);
//查找目的存储池
if(poolNameDesc!=poolNameSrc){
storagePoolDesc=connect.storagePoolLookupByName(poolNameDesc);
<?xml version="1.0" encoding="UTF-8"?>
<domain type="qemu">
    <name>20050505云计算与大数据</name>
    <memory unit="G">1</memory>
    <vcpu>1</vcpu>
    <os>
        <type arch="x86_64" machine="pc">hvm</type>
        <boot dev="hd"/>
    </os>
    <devices>
        <emulator>/usr/bin/qemu-system-x86_64</emulator>
        <disk type="file" device="disk">
            <source file="/home/chenyiguang/images/20050505云计算与大数据"/>
            <target dev="hda"/>
        </disk>
        <interface type="network">
            <source network="default"/>
        </interface>
        <input type="mouse" bus="ps2"/>
        <graphics type="vnc" port="10001" listen="127.0.0.1"/>
    </devices>
</domain>
$ virt-xml-validate error.xml 
error.xml validates
<graphics type="vnc" port="10001" listen="127.0.0.1"/>