0

私はこのコードを書きました:

package sample;
import org.freedesktop.dbus.DBusInterface;
import org.freedesktop.dbus.DBusInterfaceName;
import org.freedesktop.dbus.DBusConnection;

@DBusInterfaceName("org.mpris.clementine")
interface Player extends DBusInterface, java.rmi.Remote {
    void Pause();
}


class Main {
        public static void main (String[] args) throws org.freedesktop.dbus.exceptions.DBusException, java.lang.InterruptedException {
                DBusConnection dc = DBusConnection.getConnection(DBusConnection.SESSION);
                Player player = (Player) dc.getRemoteObject("org.mpris.clementine", "/Player");
                player.Pause();
                dc.disconnect();
        }
}

そしてラインでミスをする

Player player = (Player) dc.getRemoteObject("org.mpris.clementine", "/Player");

それは言う

Exception in thread "main" java.lang.ClassCastException: $Proxy2 cannot be cast to sample.Player

問題は継承の誤解やそのようなものにあることを私は知っています。徹底的に検索しましたが、答えが見つかりませんでした。この行を正しく書くには?そして、間違いは何ですか?

4

3 に答える 3

0

代わりにこれを使用してください:

Object obj = dc.getRemoteObject("org.mpris.clementine", "/Player");
if( obj instanceof Player ) {
    Player player = (Player) obj;
    player.pause();
}
于 2013-01-06T14:31:55.773 に答える
0

クラスがによって返されることを確認する必要があります

 dc.getRemoteObject  

インターフェイスPlayerを実装します

于 2013-01-06T14:07:17.467 に答える
0

オブジェクトをアンマーシャリングする必要があるリモート操作の場合、「dc.getRemoteObject()」が何をするかわからない。

Object obj= dc.getRemoteObject("org.mpris.clementine", "/Player");

Player player =(Player )PortableRemoteObject.narrow(obj,Player.class)

于 2013-01-06T15:41:05.133 に答える