0

用于激活无线连接的文档ActivateConnection说您可以提供"/"第二个和第三个参数来让 dbus 为您选择合理的默认值。

由于 Java 中函数的绑定是 type DBusInterface,你是怎么做的?你几乎不会写(DBusInterface)"/",是吗?

如果有人能回答以上问题,我将不胜感激。对于在该领域有更多时间或知识的人来说,我要解决的真正ActivateConnection问题是我的呼叫崩溃了。这是我导致崩溃的代码。它引用了这个接口

            var nmIface = (NetworkManagerIface) instance.getRemoteObject(NetworkManagerIface._NM_IFACE, NetworkManagerIface._NM_PATH, NetworkManagerIface.class);
            System.out.println("Connect:" + connMatch.getObjectPath());
            System.out.println("Adaptor:" + adaptor.getObjectPath());
            System.out.println("AccessP:" + accessMatch.getObjectPath());
            for (DBusPath devName : nmIface.GetDevices()) {
                System.out.println("   Device:" + devName.getPath());
            }
            nmIface.ActivateConnection(connMatch, adaptor, accessMatch);

并产生此输出(由 SO 插入颜色):

Connect:/org/freedesktop/NetworkManager/Settings/4
Adaptor:/org/freedesktop/NetworkManager/Devices/3
AccessP:/org/freedesktop/NetworkManager/AccessPoint/248
   Device:/org/freedesktop/NetworkManager/Devices/1
   Device:/org/freedesktop/NetworkManager/Devices/2
   Device:/org/freedesktop/NetworkManager/Devices/3
Exception in thread "JavaFX Application Thread" org.freedesktop.dbus.exceptions.DBusExecutionException: Failed to construct D-Bus type: Not an object exported or imported by this connection at org.freedesktop.dbus.RemoteInvocationHandler.executeRemoteMethod(RemoteInvocationHandler.java:102)
        at org.freedesktop.dbus.RemoteInvocationHandler.invoke(RemoteInvocationHandler.java:228)
        at com.sun.proxy.$Proxy23.ActivateConnection(Unknown Source)
        at com.mycompany.Wifi.activateConnection(Wifi.java:322)

如果有人可以就这可能有什么问题提供任何指示我将更加感激。

4

1 回答 1

1

您的绑定几乎肯定是错误的。如果我们查看Activate Connection的文档,我们会看到它具有以下参数:

ActivateConnection (IN  o connection,
                    IN  o device,
                    IN  o specific_object,
                    OUT o active_connection);

在这种情况下,'o' 告诉你这个参数类型是什么。类型在DBus 规范中指定,但出于我们的目的,我们只需要知道 'o' 表示此参数是一个对象路径。这将对应Path于 dbus-java 中的类型(如果您使用的是 2.7 绑定)或者DBusPath如果您使用的是 hypfvieh 更新的 3.2 绑定。

目前的类型是:

public DBusInterface ActivateConnection(DBusInterface connection, DBusInterface device, DBusInterface specific_object);

但考虑到“o”的实际含义,这应该是:

public DBusInterface ActivateConnection(DBusPath connection, DBusPath device, DBusPath specific_object);

更好的解决方案是使用CreateInterfacedbus-java 程序(hypfvieh 的版本)来获取内省 XML并自动为您创建此类。

于 2019-11-27T03:19:57.650 回答