2016-02-18 11 views
5

Ich versuche, ein Objekt in Jython zu erstellen und zu werfen und ich folgende Fehlermeldung erhalte:Jython - Klasse Cast Exception mit PyObject

Exception in thread "MainThread" java.lang.ClassCastException: org.python.core.PySingleton cannot be cast to resources.ixia.IxNetType 
at resources.ixia.IxNetFactory.create(IxNetFactory.java:34) 
at resources.ixia.IxiaTest.run(IxiaTest.java:34) 
at resources.ixia.IxiaTest.<init>(IxiaTest.java:14) 
at resources.ixia.IxiaTest.main(IxiaTest.java:42) 

Hier ist der Code:

import org.python.core.PyObject; 
import org.python.util.PythonInterpreter; 

public class IxNetFactory { 

    private PyObject ixNetClass; 
    private PythonInterpreter interpreter; 

    public IxNetFactory(String script_dir) { 
     script_dir=script_dir.replace("\\", "/"); 

     interpreter = new PythonInterpreter(); 

     interpreter.exec("import sys");    
     interpreter.exec("sys.path.append('"+script_dir+"')"); 
     interpreter.exec("import time"); 
     interpreter.exec("import os"); 
     interpreter.exec("from ixnetworks import IxNet"); 
     //interpreter.exec("from utils import sm"); 
     //interpreter.exec("from utils import cpf"); 

     ixNetClass = interpreter.get("IxNet"); 
    } 

    /* 
    * Create an IxNet object 
    * 
    * Usage: ixNet.create(); 
    */ 
    public IxNetType create() { 
     PyObject ixNetObject = ixNetClass.__call__(); 
     return (IxNetType)ixNetObject.__tojava__(IxNetType.class); 
    } 

    public void close() { 
     interpreter.close(); 
    } 
} 

Für die Leben von mir Ich kann nicht herausfinden, was ich falsch mache. Von all den Dingen, die ich gelesen habe, scheint ich das richtig zu machen, aber ich kann es nicht zur Arbeit bringen.

Wenn jemand mit Erfahrung mit Jython mir sagen könnte, was ich falsch mache, wäre es sehr geschätzt.

+1

I frage mich, wie 'IxNet' und' IxNetType' aussehen. Wenn die Quelle für diese Typen geschlossen ist, können Sie sie so umschreiben, dass ihre Belichtung minimiert wird, aber Ihr Problem immer noch reproduziert wird? –

Antwort

0

Dies ist eine sehr späte Antwort, aber für andere Leute, die das gleiche Problem haben könnte: Ich hatte gerade, was ich glaube, um den gleichen Fehler zu sein, und es behoben. Ich vermute, dass die Deklaration Ihrer Python-Klasse nicht von Ihrer Schnittstelle erbt.

Zum Beispiel ixnet.py:

import IxNetType 

class IxNet(IxNetType): 
... 

Dies ist, was Sie haben sollten. Stattdessen werden Sie wahrscheinlich nur erklärt IxNet wie:

class IxNet: 
... 

, die den Fehler erzeugen wird: "java.lang.ClassCastException: org.python.core.PySingleton kann nicht gegossen werden, um resources.ixia.IxNetType"