Example #1
0
def j_string(loader: ClassLoader, python_str):
    """
    根据python字符串返回相应的Java字符串实例
    :param loader: 
    :param python_str: 
    :return:
    """

    # 如果Java字符串已经在池中,直接返回
    interned_str = interned_strings.get(python_str)
    if interned_str:
        return interned_str

    # 把python字符串(utf-8格式)转成Java字符数组(utf-16格式)
    chars = string_to_utf16(python_str)
    # 创建一个Java字符串实例
    j_chars = Object(loader.load_class("[C"), chars)

    # 把字符串实例的value变量设置成刚刚转换过来的字符数组
    j_str = loader.load_class("java/lang/String").new_object()
    j_str.set_ref_var("value", "[C", j_chars)

    # 把Java字符串放入池中
    interned_strings[python_str] = j_str
    return j_str
Example #2
0
def start_JVM(cmd):
    class_path = Classpath.parse(cmd.XjreOption, cmd.cpOption)
    print("classpath:{0} class:{1} args:{2}".format(class_path, cmd.class_name, cmd.args))

    class_loader = ClassLoader(class_path, cmd.verbose_class_flag)

    class_name = cmd.class_name.replace(".", "/")
    main_class = class_loader.load_class(class_name)
    main_method = main_class.get_main_method()

    if main_method:
        Interpreter.interpret(main_method, cmd.verbose_inst_flag)
    else:
        print("Main method not found in class {0}".format(cmd.class_name))