Jython中的方法能否返回Java对象?

Jython中的方法能否返回Java对象?,java,swing,jython,Java,Swing,Jython,我正在使用Marathon测试Java Swing应用程序。使用Jython的Java Swing应用程序测试工具。在这个问题的整个范围内,我只关注两个python文件 CallingFile.py: testObject = getParentOfFooJPanel(get_component('...')) print(testObject.getClass().getSimpleName()) #this is only here for testing

我正在使用Marathon测试Java Swing应用程序。使用Jython的Java Swing应用程序测试工具。在这个问题的整个范围内,我只关注两个python文件

CallingFile.py:

    testObject = getParentOfFooJPanel(get_component('...'))
    print(testObject.getClass().getSimpleName()) #this is only here for testing
                                                 #if my code works, but this is
                                                 #where I get the errors
from FileWithMethod import getStringReader
testObject = getStringReader("Hello World")
print(type(testObject))
FileWithMethod.py

    def getParentOfFooJPanel(startingComponent):
        if (startingComponent.getClass().getSimpleName() == 'FooJPanel')

            print(startingComponent.getClass().getSimpleName()) #prints what I would expect
            print(startingComponent.getParent().getClass().getSimpleName()) #prints what I would expect
            return(startingComponent.getParent())

        else:

            getParentOfFooJPanel(startingComponent.getParent())
import java.io.StringReader
def getStringReader(string):
    return java.io.StringReader(string)

每当我尝试引用FileWithMethod.py中的对象时,它的行为与我预期的一样。但是,当我返回组件(Java对象)并尝试在CallingFile.py中使用它时(现在我在这里调用以打印简单名称),它会说“NoneType”对象没有属性“getClass”。Jython不能返回Java对象吗?如果没有,有什么解决办法吗?

Jython肯定可以返回Java对象。下面是一个返回对象的示例

您的错误很可能意味着代码中的其他错误正在返回
None

CallingFile.py:

    testObject = getParentOfFooJPanel(get_component('...'))
    print(testObject.getClass().getSimpleName()) #this is only here for testing
                                                 #if my code works, but this is
                                                 #where I get the errors
from FileWithMethod import getStringReader
testObject = getStringReader("Hello World")
print(type(testObject))
FileWithMethod.py

    def getParentOfFooJPanel(startingComponent):
        if (startingComponent.getClass().getSimpleName() == 'FooJPanel')

            print(startingComponent.getClass().getSimpleName()) #prints what I would expect
            print(startingComponent.getParent().getClass().getSimpleName()) #prints what I would expect
            return(startingComponent.getParent())

        else:

            getParentOfFooJPanel(startingComponent.getParent())
import java.io.StringReader
def getStringReader(string):
    return java.io.StringReader(string)
运行它:

$ jython CallingFile.py
<type 'java.io.StringReader'>
$jython CallingFile.py

我已将
return startingComponent.getParent()替换为
return java.awt.Component(startingComponent.getParent())
,但是现在我得到了错误no visible constructor,因为java.awt.Component只有一个构造函数,并且它是受保护的。我已经读到,你可以告诉Jython忽略java可访问性,但我宁愿不这样做,除非我绝对必须这样做。此外,Component是一个抽象类,所以我不能真正将其转换为Component对象。我只能使用回答你的问题:“是的,Jython方法可以返回Java对象”。我不能为你编写代码;如果你有无法返回对象的代码,你需要弄清楚为什么你的代码不能这样做。我不是要你为我编写代码。我只是不明白为什么
return startingComponent.getParent()
返回'NoneType'对象,但当我调用另一个方法时(在FileWithMethod内部)对于相同的东西,它被视为一个组件对象,正如我所期望的。如果我不能返回该东西,但可以将其传递给另一个方法,那么这与不能将对象从一个文件传递到另一个文件有关。我只是说。我找到了一个解决方法。谢谢你的评论和时间。不确定,但你可能需要返回以进行重现打电话给getParentOfFooJPanel。