Java HttpServer错误:访问限制:类型' HttpServer'不是API

时间:2016-12-12 10:59:02

标签: java

我试图用java HttpServer类做点什么。

这是文档中的最小例子:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import com.sun.net.httpserver.HttpServer;

class MyHandler implements HttpHandler 
{
    public void handle(HttpExchange t) throws IOException 
    {
        InputStream is = t.getRequestBody();
        read(is); // .. read the request body
        String response = "This is the response";
        t.sendResponseHeaders(200, response.length());
        OutputStream os = t.getResponseBody();
        os.write(response.getBytes());
        os.close();
    }
}

public class Main 
{
    HttpServer server = HttpServer.create(new InetSocketAddress(8000));
    server.createContext("/applications/myapp", new MyHandler());
    server.setExecutor(null); // creates a default executor
    server.start();
}

但我收到此错误消息:

  

描述资源路径位置类型   访问限制:类型' HttpServer'不是API(对所需库的限制' /Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/rt.jar')Main.java / test / src / test第7行Java问题

这甚至意味着什么?根据Oracle文档,这应该可行。或者我错了吗?

3 个答案:

答案 0 :(得分:3)

不要认为您应该使用Sun的内部软件包,但仍然可以尝试禁用该错误:

转到项目属性 - > Java编译器 - >错误/警告 - >已弃用且受限制的API

this post也可以帮到你。

如果仍然存在问题,你可以选择Christian Hujer's answer,他说Eclipse有一种称为访问限制的机制,以防止你意外地使用Eclipse认为不属于公共API的类。

答案 1 :(得分:1)

错误消息想要说您正在访问不属于该库官方API的代码。更具体地说,com.sun.net.httpserver.HttpServer是一个不保证包含在所有Java 8运行时实现中的类。因此,在某些Java安装中,使用该类的代码可能会失败。

为了仍然可以使用此课程,请查看此问题的答案:Access restriction on class due to restriction on required library rt.jar?

答案 2 :(得分:0)

从构建路径中删除JRE系统库,然后将其重新添加。 选择“添加库”,然后选择JRE系统库。默认的应该可以。

BuildPath >>库