2016-02-18 22 views
5

tôi đang cố gắng để tạo ra và đúc một đối tượng trong Jython và tôi nhận được lỗi sau:Jython - Class Cast ngoại lệ với 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) 

Đây là mã:

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(); 
    } 
} 

Đối với cuộc sống của tôi Tôi không thể tìm ra những gì tôi đang làm sai. Từ tất cả những điều tôi đã đọc, tôi dường như đang làm điều này một cách chính xác nhưng tôi không thể làm cho nó hoạt động được.

Nếu bất kỳ ai có kinh nghiệm với Jython có thể cho tôi biết những gì tôi đang làm sai nó sẽ được nhiều đánh giá cao.

+1

tôi tự hỏi những gì 'IxNet' và' IxNetType' trông giống như. Nếu nguồn cho các loại này được đóng lại, bạn có thể viết lại chúng theo cách sao cho giảm thiểu phơi nhiễm nhưng vẫn tái tạo vấn đề của bạn? –

Trả lời

0

Đây là câu trả lời rất muộn, nhưng đối với những người khác có thể phải đối mặt với cùng một vấn đề: Tôi chỉ có những gì tôi tin là cùng một lỗi, và sửa nó. Tôi đoán rằng việc khai báo lớp Python của bạn không kế thừa từ giao diện của bạn.

Ví dụ, ixnet.py:

import IxNetType 

class IxNet(IxNetType): 
... 

Đây là những gì bạn nên có. Thay vào đó, bạn có thể chỉ tuyên bố IxNet như:

class IxNet: 
... 

mà sẽ tạo ra lỗi: "java.lang.ClassCastException: org.python.core.PySingleton không thể được đúc để resources.ixia.IxNetType"

Các vấn đề liên quan