我试图用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文档,这应该可行。或者我错了吗?
答案 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 >>库