2015-08-20 5 views
0

Кажется, дубликат вопроса о том, как убить процесс, уже запущенный на этом порту, но это другой вопрос. Когда я убил процесс и перезапустил его, он все равно дает мне это сообщение об ошибке, похоже, что у Netbeans есть проблема, и сообщение об ошибке застревает и продолжает появляться даже тогда, когда порт не используется.Сообщение об ошибке не исчезает в Netbeans, почему? "java.net.BindException: уже используемый адрес: bind"

Я использовал инструмент на: http://www.yougetsignal.com/tools/open-ports/ проверить порт: 6600

Вот что он говорит:

enter image description here

Мой код выглядит следующим образом:

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» или поместить его в правильное sub dir, я даже не могу найти, где это, как его исправить?

+1

_Address уже используется: bind_ может означать только одно: адрес уже используется, либо вашим текущим процессом (т.е.вы пытались привязываться к нему более одного раза) или другим. Узнайте, что и закрыли. Или ясно покажите нам в своем вопросе, что ни один другой процесс не использует этот порт, прежде чем пытаться связать его. –

+0

@SotiriosDelimanolis: Смотрите мое добавленное изображение. – Frank

+0

Вы уверены, что порт не открыт? Удаленное приложение не увидит все - попробуйте netstat (многие службы только прослушивают адрес loopback, поэтому не будут видеть приложение сканирования, как вы использовали). – TheFiddlerWins

ответ

1

Относительно:

есть «уведомление», говоря, что-то вроде: «Пакет-info.class находится в неправильном месте, удалить его или поместить его в правом поддереве каталога ...» не вспомните точную формулировку

Пожалуйста, повторите попытку и скопируйте и вставьте или снимите скриншот с точной формулировкой в ​​вопросе.

Я думаю, было бы гораздо лучше явно вызвать shutdown() на вашем ExecutiveService и остановить (1) на вашем HttpServer, а не надеяться, что сбор мусора сделает это. И это позволит вам контролировать печатные сообщения, подтверждающие это.

например.

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 имеется строка состояния.

screenshot of status line

Если вы видите это вам нужно нажать маленькую х, чтобы остановить процесс независимо вы запущен, но, возможно, забыл о.

+0

Спасибо за информацию. Полезно. Определенно не нижняя статусная вещь, я закрыл Netbeans заново, даже удалил проект и скопировал вчерашнюю версию, у него все еще была эта проблема. – Frank

+0

Я только что поймал сообщение об ошибке и разместил новый вопрос, связанный с этим: http://stackoverflow.com/questions/32141818/error-message-in-netbeans-8-0-2-when-runnning- HTTPServer-хау к Fix-It – Frank

 Смежные вопросы

  • Нет связанных вопросов^_^