调查 JmDNS3.4.1 jar 时出现问题

发布于 2024-12-02 09:24:45 字数 2963 浏览 5 评论 0原文

我是这里的新手。我正在使用 osgi 包和 JmDNS 处理我的第一个程序。将 JmDNS 3.4.1 jar 添加到我的项目后,我正在测试以下基本代码:

我的激活器:

package test.discoverservice;

import java.io.IOException;
import test.DiscoverServices;

import javax.jmdns.JmDNS;
import javax.jmdns.ServiceTypeListener;

import org.equinoxosgi.jmdns.dev.discoverservice.DiscoverServices.SampleListener;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class JmdnsActivator implements BundleActivator {

public void start(BundleContext context) throws Exception {
    System.out.println("Launching");
    try {
            System.out.println("step 1");
                final JmDNS jmdns = JmDNS.create();
        System.out.println("step 2");
                jmdns.addServiceListener("_http._tcp.local.", new SampleListener());              
               // jmdns.close();
               // System.out.println("Done");
             } catch (IOException e) {
                 e.printStackTrace();
             }  
}

public void stop(BundleContext context) throws Exception {
    System.out.println("Terminating");
}
}

这是捆绑包:

package test.discoverservice;

import javax.jmdns.ServiceEvent;
import javax.jmdns.ServiceListener;


public class DiscoverServices {

   static class SampleListener implements ServiceListener {
       @Override
       public void serviceAdded(ServiceEvent event) {
           System.out.println("Service added   : " + event.getName() + "." +   event.getType());
        }

       @Override
       public void serviceRemoved(ServiceEvent event) {
           System.out.println("Service removed : " + event.getName() + "." + event.getType());
       }

       @Override
       public void serviceResolved(ServiceEvent event) {
           System.out.println("Service resolved: " + event.getInfo());
       }
   }    
  }

当我运行代码时,我得到 :

osgi> Launching
step 1

然后它停止,所以我猜有一个问题随着 JmDNS 实例的创建.. 有什么想法吗?

请注意,如果我不使用带有激活器的捆绑包(带有主程序的简单程序),则一切正常

import java.io.IOException;
import javax.jmdns.JmDNS;
import javax.jmdns.ServiceEvent;
import javax.jmdns.ServiceTypeListener;
public class DiscoverServiceTypes {
    static class SampleListener implements ServiceTypeListener {
    @Override
    public void serviceTypeAdded(ServiceEvent event) {
        System.out.println("Service type added: " + event.getType());
    }
    public void subTypeForServiceTypeAdded(ServiceEvent event) {
        System.out.println("SubType for service type added: " + event.getType());
    }
}


public static void main(String[] args) {
    try {
        JmDNS jmdns = JmDNS.create();
        System.out.println("JmDNS created !!");
        jmdns.addServiceTypeListener(new SampleListener());
       // jmdns.close();
       // System.out.println("Done");
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

PS:我在 Windows 上运行它

I'm newbie here. I'm dealing with my first program using osgi bundles and JmDNS. After adding JmDNS 3.4.1 jar to my project, I'm testing the following basic code:

My Activator:

package test.discoverservice;

import java.io.IOException;
import test.DiscoverServices;

import javax.jmdns.JmDNS;
import javax.jmdns.ServiceTypeListener;

import org.equinoxosgi.jmdns.dev.discoverservice.DiscoverServices.SampleListener;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class JmdnsActivator implements BundleActivator {

public void start(BundleContext context) throws Exception {
    System.out.println("Launching");
    try {
            System.out.println("step 1");
                final JmDNS jmdns = JmDNS.create();
        System.out.println("step 2");
                jmdns.addServiceListener("_http._tcp.local.", new SampleListener());              
               // jmdns.close();
               // System.out.println("Done");
             } catch (IOException e) {
                 e.printStackTrace();
             }  
}

public void stop(BundleContext context) throws Exception {
    System.out.println("Terminating");
}
}

and here is the bundle:

package test.discoverservice;

import javax.jmdns.ServiceEvent;
import javax.jmdns.ServiceListener;


public class DiscoverServices {

   static class SampleListener implements ServiceListener {
       @Override
       public void serviceAdded(ServiceEvent event) {
           System.out.println("Service added   : " + event.getName() + "." +   event.getType());
        }

       @Override
       public void serviceRemoved(ServiceEvent event) {
           System.out.println("Service removed : " + event.getName() + "." + event.getType());
       }

       @Override
       public void serviceResolved(ServiceEvent event) {
           System.out.println("Service resolved: " + event.getInfo());
       }
   }    
  }

when I run the code, I get :

osgi> Launching
step 1

and then it stops, so I guess there is a probelm with the creation of the JmDNS instance..
Any idea please?

Note that if I don't use a bundle with an activator (simple program with main) everything works properly

import java.io.IOException;
import javax.jmdns.JmDNS;
import javax.jmdns.ServiceEvent;
import javax.jmdns.ServiceTypeListener;
public class DiscoverServiceTypes {
    static class SampleListener implements ServiceTypeListener {
    @Override
    public void serviceTypeAdded(ServiceEvent event) {
        System.out.println("Service type added: " + event.getType());
    }
    public void subTypeForServiceTypeAdded(ServiceEvent event) {
        System.out.println("SubType for service type added: " + event.getType());
    }
}


public static void main(String[] args) {
    try {
        JmDNS jmdns = JmDNS.create();
        System.out.println("JmDNS created !!");
        jmdns.addServiceTypeListener(new SampleListener());
       // jmdns.close();
       // System.out.println("Done");
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

PS: I'm running it on Windows

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

薄荷港 2024-12-09 09:24:45

如果尚未完成,您必须将导入的库添加到 OSGI 框架的 MANIFEST.MF 文件的类路径中。
Bundle-ClassPath:org.json.jar,
lib/jmdns-3.4.1.jar, ...

如果您从 sourceforge 获取库,请检查 jar 文件是否正确,并且 jar 中没有类出现两次。 (如果是这样,只需使用 Maven 中的 .jar)

You have to add the imported library in the classpath of the MANIFEST.MF file of the OSGI Framework if not already done.
Bundle-ClassPath: org.json.jar,
lib/jmdns-3.4.1.jar, ...

If you got the lirary from sourceforge check if the jar file is correct and no class is present twice in the jar. (If so, just use the .jar from Maven)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文