5

ボタンをクリックするだけで、メイン プログラムとは別のスレッドでエンドポイント Web サービスを開始/停止しようとしています。起動は問題なく、すべての WebMethods に問題なくアクセスできます。問題は、停止ボタンをクリックして Web サービス エンドポイントを停止しようとすると、例外が発生し、それが何であるかわからないことです。私はJavaも初めてです。

前もって感謝します。

「ep.stop()」で例外がスローされました:

WebService Running On: http://0.0.0.0:9898/

        Exception in thread "Thread-0" java.lang.NullPointerException
            at com.sun.xml.internal.ws.transport.http.server.ServerMgr.removeContext(Unknown Source)
            at com.sun.xml.internal.ws.transport.http.server.HttpEndpoint.stop(Unknown Source)
            at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.stop(Unknown Source)
            at com.simba.Server.startWebSrv(Server.java:27)
            at com.simba.Server.run(Server.java:13)

サーバークラス:

import javax.xml.ws.Endpoint;

public class Server extends Thread {

      public volatile boolean active = true;
      private Endpoint ep; 
      private String ip = "0.0.0.0";

      public void run(){
            ep = Endpoint.publish("http://" + ip + ":9898/",  new SWS());
            startWebSrv();
      }

      private void startWebSrv(){
          synchronized(this){
              try {
                  while (active) {
                      System.out.println("WebService Running On: http://" + ip + ":9898/");
                      wait();
                  }
              }catch (InterruptedException e) {
                  e.printStackTrace();
              }finally{
                if(!active){
                    ep.stop();
                    System.out.println("WebService Stopped!");
                }
              }
          }
      }
}

メインプログラムからサービス/スレッドを停止しようとしている方法:

MenuItem mntmToggleWebservice = new MenuItem(menu_4, SWT.NONE);
        mntmToggleWebservice.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                synchronized(srv){
                    srv.active = false;
                    srv.notifyAll();            
                }
            }
        });
        mntmToggleWebservice.setText("Toggle WebService");
4

2 に答える 2

8

問題が解決しました!

使用しないでください'0.0.0.0'。何らかの理由で、「0.0.0.0」でサービスを作成すると (マシンの実際の IP を使用して) 機能しますが、Endpoint.stop()うまく機能しません。

代わりに'System.getEvn('COMPUTERNAME')'、マシン名でサービスを使用して作成しました。

于 2013-03-20T14:18:18.063 に答える