[英]Error message not going away in Netbeans, why? “java.net.BindException: Address already in use: bind”
似乎是一個重復的問題,即如何終止已經在該端口上運行的進程,但這是一個不同的問題。 當我終止該進程並重新啟動它時,它仍然給我該錯誤消息,好像Netbeans有問題,並且即使端口未使用,該錯誤消息也被卡住並不斷出現。
我在以下網址使用過該工具: http : //www.yougetsignal.com/tools/open-ports/檢查端口:6600
它說的是:
我的代碼如下所示:
import java.io.*;
import java.util.*;
import com.sun.net.httpserver.*;
import java.net.InetSocketAddress;
import java.util.concurrent.Executors;
import Utility.*;
public class Http_Server
{
static int Port=6600,Thread_Count=50,Resume_Count=0; // 8080
InetSocketAddress addr;
HttpServer server;
static String App_Id="Resume_App";
static Resume_Loader Resume_loader;
static Get_Time Timer=new Get_Time();
static Vector<String> Current_Keywords_Vector=new Vector();
static boolean Debug_B=true;
public Http_Server(int Port)
{
if (Port>-1) this.Port=Port;
Srart_Server();
}
void Srart_Server()
{
try
{
Resume_loader=new Resume_Loader();
addr=new InetSocketAddress(Port);
server=HttpServer.create(addr,0); // Line : 34
server.createContext("/"+App_Id,new MyHandler(server));
server.setExecutor(Executors.newCachedThreadPool());
server.start();
Out("Server is listening on port : "+Port);
}
catch (Exception e)
{
Resume_App.Save_To_Log(e.toString()+"\n"+Tool_Lib_Simple.Get_Stack_Trace(e));
e.printStackTrace();
Out(e.toString());
}
}
private static void out(String message) { System.out.print(message); }
private static void Out(String message) { System.out.println(message); }
public static void main(String[] args) { Http_Server Demo=new Http_Server(-1); }
}
昨天運行良好,但是今天早上我改變了:
InetSocketAddress addr; to static InetSocketAddress addr;
HttpServer server; to static HttpServer server;
當我運行它時,出現以下錯誤消息:
Server is listening on port : 6600
java.net.BindException: Address already in use: bind
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:437)
at sun.nio.ch.Net.bind(Net.java:429)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
at sun.net.httpserver.ServerImpl.<init>(ServerImpl.java:100)
at sun.net.httpserver.HttpServerImpl.<init>(HttpServerImpl.java:50)
at sun.net.httpserver.DefaultHttpServerProvider.createHttpServer(DefaultHttpServerProvider.java:35)
at com.sun.net.httpserver.HttpServer.create(HttpServer.java:130)
at Http_Server.Srart_Server(Http_Server.java:34)
at Http_Server.<init>(Http_Server.java:24)
at Http_Server.main(Http_Server.java:51)
然后我意識到如果它們是靜態的,它們可能會將它們保留在內存中並占用端口,因此我像上面的代碼一樣將它們改回了非靜態的。 但是現在當我運行它時,該錯誤消息不斷出現,並且在Netbeans中有一個“通知”,內容如下:“ package-info.class放在錯誤的位置,請將其刪除或放在正確的子目錄中... “不記得確切的用詞。 但是,當我打開該URL時,該網頁可以正常工作,好像沒有任何錯誤消息,並且當我停止服務器時,該頁面也不會像預期的那樣顯示。
因此,這似乎是Netbeans 8.0.2發生故障,但是我不知道如何使錯誤消息不出現,或者它提示如何刪除“ package-info.class”或將其放入正確的子目錄中,我甚至找不到它在哪里,如何解決它?
關於:
有一個“通知”,內容類似於:“ package-info.class放置在錯誤的位置,將其刪除或放在正確的子目錄中……”,請記住確切的措辭
請再次進行,然后將確切的措詞復制並粘貼或截圖到您的問題中。
我認為最好在ExecutiveService上顯式調用shutdown()並在HttpServer上顯式調用stop(1),而不是希望垃圾回收可以做到。 而且它可以讓您控制打印一些確認消息。
例如。
InetSocketAddress addr = new InetSocketAddress(6600);
ExecutorService es = Executors.newCachedThreadPool();
HttpServer server = HttpServer.create(addr, 0);;
server.createContext("/foo", new HttpHandler() {
@Override
public void handle(HttpExchange he) throws IOException {
String response = "My Response";
he.sendResponseHeaders(200, response.length());
OutputStream os = he.getResponseBody();
os.write(response.getBytes());
os.close();
}
});
server.setExecutor(es);
server.start();
System.out.println("Press enter to stop server.");
// block waiting for user to press enter.
System.in.read();
System.out.println("Shutting down");
server.stop(1);
es.shutdownNow();
System.out.println("should be shutdown now.");
在netbeans的底部也有一個狀態行。
如果看到此消息,則需要單擊小x停止您啟動但可能已忘記的任何過程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.