将java库导入x10类

时间:2015-07-17 07:35:15

标签: java ant import libraries x10-language

我正在用x10语言做一个项目。它的后端是java。我需要将一些有用的java库导入x10类。但是当我使用ant构建项目时,它会产生构建错误,说明找不到导入的类名。然后我尝试将它们导入到java类中。我成功了。

但我需要的是将它们导入x10类。

2 个答案:

答案 0 :(得分:2)

您需要做两件事。

  1. 在x10程序中,添加import声明(例如import java.util.HashMap)
  2. 在调用x10c编译器时,确保要使用的Java类的.class文件位于sourcepath中。如果要导入属于Java标准库(java。*)的类,则应该可以正常工作。如果要导入自己的类,则需要使用-cp命令行参数告诉x10c类。
  3. 在samples / java.interop目录中有一些X10 / Java interop的例子可能有所帮助。以下是其中一个供参考:

    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.util.EntityUtils;
    
    
    /**
     * An example to show how to use Apache HttpComponents HttpClient 4.2.1 in X10.
     * Compile as "x10c -cp httpclient-4.2.1.jar:httpcore-4.2.1.jar HttpClient.x10"
     * Run as as "x10 -cp .:httpclient-4.2.1.jar:httpcore-4.2.1.jar:commons-logging-1.1.1.jar HttpClient"
     */
    public class HttpClient {
        static val url = "http://targethost/";
    
        public static def main(Rail[String]):void {
            finish for (p in Place.places()) {
                at (p) async {
                    val ncores = java.lang.Runtime.getRuntime().availableProcessors();
                    Console.OUT.println("Place " + p.id + " has " + ncores + " cores.");
                    finish for (var i:Int = 0n; i < ncores; ++i) {
                        val coreid = i;
                        async {
                            Console.OUT.println("Place " + p.id + " core " + coreid + " start.");
                            val httpclient = new DefaultHttpClient();
                            val httpGet = new HttpGet(url);
                            while (true)
                            {
                                val response1 = httpclient.execute(httpGet);
                                /*
                                 * The underlying HTTP connection is still held by the response object 
                                 * to allow the response content to be streamed directly from the network socket. 
                                 * In order to ensure correct deallocation of system resources 
                                 * the user MUST either fully consume the response content  or abort request 
                                 * execution by calling HttpGet#releaseConnection().
                                 */
                                try {
                                    Console.OUT.println(response1.getStatusLine());
                                    val entity1 = response1.getEntity();
                                    /* do something useful with the response body and ensure it is fully consumed */
                                    EntityUtils.consume(entity1);
                                } finally {
                                    httpGet.releaseConnection();
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    

答案 1 :(得分:-2)

x10 2.6.1在Java 8中可以通过这种方式直接使用。

(Java 9/10具有一个可以更改内容的模块系统。)