You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by 瞿叶奇 <38...@qq.com> on 2021/02/04 09:53:21 UTC
pyflink的py4j里是不是可以调用我自己写的java程序 ?
请问如何实现pyflink的py4j调用我自己写的java程序 ?
回复: pyflink的py4j里是不是可以调用我自己写的java程序 ?
Posted by 瞿叶奇 <38...@qq.com>.
老师,您好,仍然不能加载java程序,报错如下:
>>> from pyflink.util.utils import add_jars_to_context_class_loader
>>> add_jars_to_context_class_loader(['file:///root/Test2.jar'])
>>> from pyflink.java_gateway import get_gateway
>>> get_gateway().jvm.Test2.Test2.main(None)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/root/qyq_f/flink-1.12.0/opt/python/pyflink.zip/pyflink/util/exceptions.py", line 191, in wrapped_call
TypeError: Could not found the Java class 'Test2.Test2.main'. The Java dependencies could be specified via command line argument '--jarfile' or the config option 'pipeline.jars'
>>> get_gateway().jvm.Test2.main(None)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/root/qyq_f/flink-1.12.0/opt/python/pyflink.zip/pyflink/util/exceptions.py", line 191, in wrapped_call
TypeError: Could not found the Java class 'Test2.main'. The Java dependencies could be specified via command line argument '--jarfile' or the config option 'pipeline.jars'
>>> get_gateway().jvm.Test2.main()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/root/qyq_f/flink-1.12.0/opt/python/pyflink.zip/pyflink/util/exceptions.py", line 191, in wrapped_call
TypeError: Could not found the Java class 'Test2.main'. The Java dependencies could be specified via command line argument '--jarfile' or the config option 'pipeline.jars'
但是存在main函数:
>>> get_gateway().jvm.Test2.main
<py4j.java_gateway.JavaPackage object at 0x7ff901d7efd0>
------------------ 原始邮件 ------------------
发件人: "user-zh" <weizhong0618@gmail.com>;
发送时间: 2021年2月5日(星期五) 晚上7:06
收件人: "瞿叶奇"<389243409@qq.com>;
抄送: "user-zh"<user-zh@flink.apache.org>;
主题: Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
尝试调用:
get_gateway().jvm.Test2.Test2.main(None)
> 在 2021年2月5日,18:27,瞿叶奇 <389243409@qq.com> 写道:
>
> 老师,您好,列表参数就不在报错,但是还是没有加载进去。
> >>> from pyflink.util.utils import add_jars_to_context_class_loader
> >>> add_jars_to_context_class_loader(['file:///root/Test2.jar <file:///root/Test2.jar>'])
> >>> from pyflink.java_gateway import get_gateway
> >>> get_gateway().jvm.Test2.main()
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File "/root/qyq_f/flink-1.12.0/opt/python/pyflink.zip/pyflink/util/exceptions.py", line 191, in wrapped_call
> TypeError: Could not found the Java class 'Test2.main'. The Java dependencies could be specified via command line argument '--jarfile' or the config option 'pipeline.jars'
> java code:
> package Test2;
> public class Test2 {
> public int add(int a, int b) {
> return a + b;
> }
>
> public static void main(String[] args) {
> int a = 1;
> int b = 2;
> Test2 t2=new Test2();
> int c=t2.add(a,b);
> System.out.print(c);
> }
> }
>
>
> ------------------ 原始邮件 ------------------
> 发件人: "user-zh" <weizhong0618@gmail.com <mailto:weizhong0618@gmail.com>>;
> 发送时间: 2021年2月5日(星期五) 晚上6:01
> 收件人: "user-zh"<user-zh@flink.apache.org <mailto:user-zh@flink.apache.org>>;
> 主题: Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
>
> 图片似乎无法加载,不过我猜应该是参数类型问题?这个函数需要参数类型为List:
> add_jars_to_context_class_loader(["file:///xxx <file:///xxx> <file:///xxx <file:///xxx>>"])
>
> > 在 2021年2月5日,17:48,瞿叶奇 <389243409@qq.com> 写道:
> >
> > 老师,您好,
> > 我升级到了flink1.12.0了,用这个函数加载类报错了,是我url写的有问题吗?pyfink有没有连接hdfs认证kerberos的方法呢?
> >
> >
> >
> >
> > ------------------ 原始邮件 ------------------
> > 发件人: "user-zh" <weizhong0618@gmail.com>;
> > 发送时间: 2021年2月5日(星期五) 下午3:53
> > 收件人: "user-zh"<user-zh@flink.apache.org>;
> > 主题: Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
> >
> > Hi,
> >
> > 首先你需要将你的java程序打成jar包,之后热加载你的jar包, 目前pyflink里有一个util方法可以直接调用:
> > from pyflink.util.utils import add_jars_to_context_class_loader
> > add_jars_to_context_class_loader("file:///xxx <file:///xxx>") # 注意需要是url格式的路径
> >
> > 然后就能通过java gateway进行调用了:
> > from pyflink.java_gateway import get_gateway
> > get_gateway().jvm.your.class.name.main()
> >
> > 注意这个util方法是在较新的版本里才有,你可能需要升级一下pyflink版本
> >
> > > 在 2021年2月5日,10:48,瞿叶奇 <389243409@qq.com> 写道:
> > >
> > > 老师,我想用java jvm认证kerberos程序,供给pyflink使用,就是说如果是函数的话,就只是个调用的无输入函数,怎么样才能做到?
> > >
> > >
> > >
> > >
> > > ------------------&nbsp;原始邮件&nbsp;------------------
> > > 发件人: "user-zh" <hxbks2ks@gmail.com <mailto:hxbks2ks@gmail.com>&gt;;
> > > 发送时间:&nbsp;2021年2月5日(星期五) 上午10:35
> > > 收件人:&nbsp;"user-zh"<user-zh@flink.apache.org <mailto:user-zh@flink.apache.org>&gt;;
> > >
> > > 主题:&nbsp;Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
> > >
> > >
> > >
> > > Hi,
> > >
> > > 你是想使用java写的udfs吗,你可以调用register_java_function或者create_java_temporary_function来注册你用java写的udfs,具体可以参考文档[1]
> > >
> > > [1]
> > > https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/udfs/python_udfs.html#scalar-functions <https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/udfs/python_udfs.html#scalar-functions>
> > >
> > > Best,
> > > Xingbo
> > >
> > >
> > > 瞿叶奇 <389243409@qq.com <mailto:389243409@qq.com>&gt; 于2021年2月4日周四 下午5:53写道:
> > >
> > > &gt; 请问如何实现pyflink的py4j调用我自己写的java程序 ?
> >
> >
Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
Posted by Wei Zhong <we...@gmail.com>.
尝试调用:
get_gateway().jvm.Test2.Test2.main(None)
> 在 2021年2月5日,18:27,瞿叶奇 <38...@qq.com> 写道:
>
> 老师,您好,列表参数就不在报错,但是还是没有加载进去。
> >>> from pyflink.util.utils import add_jars_to_context_class_loader
> >>> add_jars_to_context_class_loader(['file:///root/Test2.jar <file:///root/Test2.jar>'])
> >>> from pyflink.java_gateway import get_gateway
> >>> get_gateway().jvm.Test2.main()
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File "/root/qyq_f/flink-1.12.0/opt/python/pyflink.zip/pyflink/util/exceptions.py", line 191, in wrapped_call
> TypeError: Could not found the Java class 'Test2.main'. The Java dependencies could be specified via command line argument '--jarfile' or the config option 'pipeline.jars'
> java code:
> package Test2;
> public class Test2 {
> public int add(int a, int b) {
> return a + b;
> }
>
> public static void main(String[] args) {
> int a = 1;
> int b = 2;
> Test2 t2=new Test2();
> int c=t2.add(a,b);
> System.out.print(c);
> }
> }
>
>
> ------------------ 原始邮件 ------------------
> 发件人: "user-zh" <weizhong0618@gmail.com <ma...@gmail.com>>;
> 发送时间: 2021年2月5日(星期五) 晚上6:01
> 收件人: "user-zh"<user-zh@flink.apache.org <ma...@flink.apache.org>>;
> 主题: Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
>
> 图片似乎无法加载,不过我猜应该是参数类型问题?这个函数需要参数类型为List:
> add_jars_to_context_class_loader(["file:///xxx <file:///xxx> <file:///xxx <file:///xxx>>"])
>
> > 在 2021年2月5日,17:48,瞿叶奇 <38...@qq.com> 写道:
> >
> > 老师,您好,
> > 我升级到了flink1.12.0了,用这个函数加载类报错了,是我url写的有问题吗?pyfink有没有连接hdfs认证kerberos的方法呢?
> >
> >
> >
> >
> > ------------------ 原始邮件 ------------------
> > 发件人: "user-zh" <we...@gmail.com>;
> > 发送时间: 2021年2月5日(星期五) 下午3:53
> > 收件人: "user-zh"<us...@flink.apache.org>;
> > 主题: Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
> >
> > Hi,
> >
> > 首先你需要将你的java程序打成jar包,之后热加载你的jar包, 目前pyflink里有一个util方法可以直接调用:
> > from pyflink.util.utils import add_jars_to_context_class_loader
> > add_jars_to_context_class_loader("file:///xxx <file:///xxx>") # 注意需要是url格式的路径
> >
> > 然后就能通过java gateway进行调用了:
> > from pyflink.java_gateway import get_gateway
> > get_gateway().jvm.your.class.name.main()
> >
> > 注意这个util方法是在较新的版本里才有,你可能需要升级一下pyflink版本
> >
> > > 在 2021年2月5日,10:48,瞿叶奇 <38...@qq.com> 写道:
> > >
> > > 老师,我想用java jvm认证kerberos程序,供给pyflink使用,就是说如果是函数的话,就只是个调用的无输入函数,怎么样才能做到?
> > >
> > >
> > >
> > >
> > > ------------------ 原始邮件 ------------------
> > > 发件人: "user-zh" <hxbks2ks@gmail.com <ma...@gmail.com>>;
> > > 发送时间: 2021年2月5日(星期五) 上午10:35
> > > 收件人: "user-zh"<user-zh@flink.apache.org <ma...@flink.apache.org>>;
> > >
> > > 主题: Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
> > >
> > >
> > >
> > > Hi,
> > >
> > > 你是想使用java写的udfs吗,你可以调用register_java_function或者create_java_temporary_function来注册你用java写的udfs,具体可以参考文档[1]
> > >
> > > [1]
> > > https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/udfs/python_udfs.html#scalar-functions <https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/udfs/python_udfs.html#scalar-functions>
> > >
> > > Best,
> > > Xingbo
> > >
> > >
> > > 瞿叶奇 <389243409@qq.com <ma...@qq.com>> 于2021年2月4日周四 下午5:53写道:
> > >
> > > > 请问如何实现pyflink的py4j调用我自己写的java程序 ?
> >
> >
回复: pyflink的py4j里是不是可以调用我自己写的java程序 ?
Posted by 瞿叶奇 <38...@qq.com>.
老师,您好,列表参数就不在报错,但是还是没有加载进去。
>>> from pyflink.util.utils import add_jars_to_context_class_loader
>>> add_jars_to_context_class_loader(['file:///root/Test2.jar'])
>>> from pyflink.java_gateway import get_gateway
>>> get_gateway().jvm.Test2.main()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/root/qyq_f/flink-1.12.0/opt/python/pyflink.zip/pyflink/util/exceptions.py", line 191, in wrapped_call
TypeError: Could not found the Java class 'Test2.main'. The Java dependencies could be specified via command line argument '--jarfile' or the config option 'pipeline.jars'
java code:
package Test2;
public class Test2 {
public int add(int a, int b) {
return a + b;
}
public static void main(String[] args) {
int a = 1;
int b = 2;
Test2 t2=new Test2();
int c=t2.add(a,b);
System.out.print(c);
}
}
------------------ 原始邮件 ------------------
发件人: "user-zh" <weizhong0618@gmail.com>;
发送时间: 2021年2月5日(星期五) 晚上6:01
收件人: "user-zh"<user-zh@flink.apache.org>;
主题: Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
图片似乎无法加载,不过我猜应该是参数类型问题?这个函数需要参数类型为List:
add_jars_to_context_class_loader(["file:///xxx <file:///xxx>"])
> 在 2021年2月5日,17:48,瞿叶奇 <389243409@qq.com> 写道:
>
> 老师,您好,
> 我升级到了flink1.12.0了,用这个函数加载类报错了,是我url写的有问题吗?pyfink有没有连接hdfs认证kerberos的方法呢?
>
>
>
>
> ------------------ 原始邮件 ------------------
> 发件人: "user-zh" <weizhong0618@gmail.com>;
> 发送时间: 2021年2月5日(星期五) 下午3:53
> 收件人: "user-zh"<user-zh@flink.apache.org>;
> 主题: Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
>
> Hi,
>
> 首先你需要将你的java程序打成jar包,之后热加载你的jar包, 目前pyflink里有一个util方法可以直接调用:
> from pyflink.util.utils import add_jars_to_context_class_loader
> add_jars_to_context_class_loader("file:///xxx <file:///xxx>") # 注意需要是url格式的路径
>
> 然后就能通过java gateway进行调用了:
> from pyflink.java_gateway import get_gateway
> get_gateway().jvm.your.class.name.main()
>
> 注意这个util方法是在较新的版本里才有,你可能需要升级一下pyflink版本
>
> > 在 2021年2月5日,10:48,瞿叶奇 <389243409@qq.com> 写道:
> >
> > 老师,我想用java jvm认证kerberos程序,供给pyflink使用,就是说如果是函数的话,就只是个调用的无输入函数,怎么样才能做到?
> >
> >
> >
> >
> > ------------------&nbsp;原始邮件&nbsp;------------------
> > 发件人: "user-zh" <hxbks2ks@gmail.com&gt;;
> > 发送时间:&nbsp;2021年2月5日(星期五) 上午10:35
> > 收件人:&nbsp;"user-zh"<user-zh@flink.apache.org&gt;;
> >
> > 主题:&nbsp;Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
> >
> >
> >
> > Hi,
> >
> > 你是想使用java写的udfs吗,你可以调用register_java_function或者create_java_temporary_function来注册你用java写的udfs,具体可以参考文档[1]
> >
> > [1]
> > https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/udfs/python_udfs.html#scalar-functions
> >
> > Best,
> > Xingbo
> >
> >
> > 瞿叶奇 <389243409@qq.com&gt; 于2021年2月4日周四 下午5:53写道:
> >
> > &gt; 请问如何实现pyflink的py4j调用我自己写的java程序 ?
>
>
Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
Posted by Wei Zhong <we...@gmail.com>.
图片似乎无法加载,不过我猜应该是参数类型问题?这个函数需要参数类型为List:
add_jars_to_context_class_loader(["file:///xxx <file:///xxx>"])
> 在 2021年2月5日,17:48,瞿叶奇 <38...@qq.com> 写道:
>
> 老师,您好,
> 我升级到了flink1.12.0了,用这个函数加载类报错了,是我url写的有问题吗?pyfink有没有连接hdfs认证kerberos的方法呢?
>
>
>
>
> ------------------ 原始邮件 ------------------
> 发件人: "user-zh" <we...@gmail.com>;
> 发送时间: 2021年2月5日(星期五) 下午3:53
> 收件人: "user-zh"<us...@flink.apache.org>;
> 主题: Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
>
> Hi,
>
> 首先你需要将你的java程序打成jar包,之后热加载你的jar包, 目前pyflink里有一个util方法可以直接调用:
> from pyflink.util.utils import add_jars_to_context_class_loader
> add_jars_to_context_class_loader("file:///xxx <file:///xxx>") # 注意需要是url格式的路径
>
> 然后就能通过java gateway进行调用了:
> from pyflink.java_gateway import get_gateway
> get_gateway().jvm.your.class.name.main()
>
> 注意这个util方法是在较新的版本里才有,你可能需要升级一下pyflink版本
>
> > 在 2021年2月5日,10:48,瞿叶奇 <38...@qq.com> 写道:
> >
> > 老师,我想用java jvm认证kerberos程序,供给pyflink使用,就是说如果是函数的话,就只是个调用的无输入函数,怎么样才能做到?
> >
> >
> >
> >
> > ------------------ 原始邮件 ------------------
> > 发件人: "user-zh" <hxbks2ks@gmail.com>;
> > 发送时间: 2021年2月5日(星期五) 上午10:35
> > 收件人: "user-zh"<user-zh@flink.apache.org>;
> >
> > 主题: Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
> >
> >
> >
> > Hi,
> >
> > 你是想使用java写的udfs吗,你可以调用register_java_function或者create_java_temporary_function来注册你用java写的udfs,具体可以参考文档[1]
> >
> > [1]
> > https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/udfs/python_udfs.html#scalar-functions
> >
> > Best,
> > Xingbo
> >
> >
> > 瞿叶奇 <389243409@qq.com> 于2021年2月4日周四 下午5:53写道:
> >
> > > 请问如何实现pyflink的py4j调用我自己写的java程序 ?
>
>
回复: pyflink的py4j里是不是可以调用我自己写的java程序 ?
Posted by 瞿叶奇 <38...@qq.com>.
老师,您好,
我升级到了flink1.12.0了,用这个函数加载类报错了,是我url写的有问题吗?pyfink有没有连接hdfs认证kerberos的方法呢?
------------------ 原始邮件 ------------------
发件人: "user-zh" <weizhong0618@gmail.com>;
发送时间: 2021年2月5日(星期五) 下午3:53
收件人: "user-zh"<user-zh@flink.apache.org>;
主题: Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
Hi,
首先你需要将你的java程序打成jar包,之后热加载你的jar包, 目前pyflink里有一个util方法可以直接调用:
from pyflink.util.utils import add_jars_to_context_class_loader
add_jars_to_context_class_loader("file:///xxx <file:///xxx>") # 注意需要是url格式的路径
然后就能通过java gateway进行调用了:
from pyflink.java_gateway import get_gateway
get_gateway().jvm.your.class.name.main()
注意这个util方法是在较新的版本里才有,你可能需要升级一下pyflink版本
> 在 2021年2月5日,10:48,瞿叶奇 <389243409@qq.com> 写道:
>
> 老师,我想用java jvm认证kerberos程序,供给pyflink使用,就是说如果是函数的话,就只是个调用的无输入函数,怎么样才能做到?
>
>
>
>
> ------------------&nbsp;原始邮件&nbsp;------------------
> 发件人: "user-zh" <hxbks2ks@gmail.com&gt;;
> 发送时间:&nbsp;2021年2月5日(星期五) 上午10:35
> 收件人:&nbsp;"user-zh"<user-zh@flink.apache.org&gt;;
>
> 主题:&nbsp;Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
>
>
>
> Hi,
>
> 你是想使用java写的udfs吗,你可以调用register_java_function或者create_java_temporary_function来注册你用java写的udfs,具体可以参考文档[1]
>
> [1]
> https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/udfs/python_udfs.html#scalar-functions
>
> Best,
> Xingbo
>
>
> 瞿叶奇 <389243409@qq.com&gt; 于2021年2月4日周四 下午5:53写道:
>
> &gt; 请问如何实现pyflink的py4j调用我自己写的java程序 ?
Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
Posted by Wei Zhong <we...@gmail.com>.
Hi,
首先你需要将你的java程序打成jar包,之后热加载你的jar包, 目前pyflink里有一个util方法可以直接调用:
from pyflink.util.utils import add_jars_to_context_class_loader
add_jars_to_context_class_loader("file:///xxx <file:///xxx>") # 注意需要是url格式的路径
然后就能通过java gateway进行调用了:
from pyflink.java_gateway import get_gateway
get_gateway().jvm.your.class.name.main()
注意这个util方法是在较新的版本里才有,你可能需要升级一下pyflink版本
> 在 2021年2月5日,10:48,瞿叶奇 <38...@qq.com> 写道:
>
> 老师,我想用java jvm认证kerberos程序,供给pyflink使用,就是说如果是函数的话,就只是个调用的无输入函数,怎么样才能做到?
>
>
>
>
> ------------------ 原始邮件 ------------------
> 发件人: "user-zh" <hxbks2ks@gmail.com>;
> 发送时间: 2021年2月5日(星期五) 上午10:35
> 收件人: "user-zh"<user-zh@flink.apache.org>;
>
> 主题: Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
>
>
>
> Hi,
>
> 你是想使用java写的udfs吗,你可以调用register_java_function或者create_java_temporary_function来注册你用java写的udfs,具体可以参考文档[1]
>
> [1]
> https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/udfs/python_udfs.html#scalar-functions
>
> Best,
> Xingbo
>
>
> 瞿叶奇 <389243409@qq.com> 于2021年2月4日周四 下午5:53写道:
>
> > 请问如何实现pyflink的py4j调用我自己写的java程序 ?
回复: pyflink的py4j里是不是可以调用我自己写的java程序 ?
Posted by 瞿叶奇 <38...@qq.com>.
老师,我想用java jvm认证kerberos程序,供给pyflink使用,就是说如果是函数的话,就只是个调用的无输入函数,怎么样才能做到?
------------------ 原始邮件 ------------------
发件人: "user-zh" <hxbks2ks@gmail.com>;
发送时间: 2021年2月5日(星期五) 上午10:35
收件人: "user-zh"<user-zh@flink.apache.org>;
主题: Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
Hi,
你是想使用java写的udfs吗,你可以调用register_java_function或者create_java_temporary_function来注册你用java写的udfs,具体可以参考文档[1]
[1]
https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/udfs/python_udfs.html#scalar-functions
Best,
Xingbo
瞿叶奇 <389243409@qq.com> 于2021年2月4日周四 下午5:53写道:
> 请问如何实现pyflink的py4j调用我自己写的java程序 ?
Re: pyflink的py4j里是不是可以调用我自己写的java程序 ?
Posted by Xingbo Huang <hx...@gmail.com>.
Hi,
你是想使用java写的udfs吗,你可以调用register_java_function或者create_java_temporary_function来注册你用java写的udfs,具体可以参考文档[1]
[1]
https://ci.apache.org/projects/flink/flink-docs-release-1.12/dev/python/table-api-users-guide/udfs/python_udfs.html#scalar-functions
Best,
Xingbo
瞿叶奇 <38...@qq.com> 于2021年2月4日周四 下午5:53写道:
> 请问如何实现pyflink的py4j调用我自己写的java程序 ?