-2

I am doing a project in x10 language. Its back-end is java. I need to import some useful java libraries to x10 class. But when I build the project with ant, it gives build errors saying imported class name is not found. Then I tried to import them to a java class. I succeeded.

But what I need is, to import them to a x10 class.

4

2 回答 2

2

您需要做两件事。

  1. 在 x10 程序中,添加导入声明(例如 import java.util.HashMap)
  2. 当您调用 x10c 编译器时,请确保要使用的 Java 类的 .class 文件位于源路径中。如果您要导入属于 Java 标准库 (java.*) 的类,这应该可以正常工作。如果您要导入自己的类,则需要使用 -cp 命令行参数告诉 x10c 有关这些类的信息。

samples/java.interop 目录中的一些 X10/Java 互操作示例可能会有所帮助。以下是其中之一供参考:

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();
                            }
                        }
                    }
                }
            }
        }
    }
}
于 2015-07-22T14:41:28.973 回答
-3

x10 2.6.1 以这种方式与 Java 8 一起开箱即用。

(Java 9 / 10 有一个改变事物的模块系统。)

于 2018-07-10T16:48:09.400 回答