簡體   English   中英

錯誤消息在Netbeans中不消失,為什么? “ java.net.BindException:地址已在使用中:綁定”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM