小编Ale*_*lov的帖子

附加麦克风后的Java声音刷新线列表

我有一个简单的捕获/回放Swing应用程序,必须检测是否没有适当的麦克风连接到计算机并警告用户.经过大量的摆弄后,我找到了唯一的解决方案,让我能够检测到新连接或移除的麦克风:

     com.sun.media.sound.JDK13Services.setCachingPeriod(0);

     private static boolean isMicrophoneAvailable() {
        try {
            if (!AudioSystem.isLineSupported(Port.Info.MICROPHONE)) {
                log.debug("NO MICROPHONE FOUND");
                return false;
            } else {
                log.debug("MICROPHONE FOUND");
                return true;
            }
        } catch (IllegalArgumentException e) {
            log.debug("INCONSISTENT");
        }
        return false;
    }
Run Code Online (Sandbox Code Playgroud)

在后台线程中调用如下:

   new Thread() {
       public void run() {
            while(!thisFrame.isClosed()){
                if(isMicrophoneAvailable() == true){
                     //OK
                }else{
                     //WARN
                }
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
      }
    }).start();
Run Code Online (Sandbox Code Playgroud)

问题是尽管使用所描述的方法正确地检测设备,但是不刷新基础线的列表.也就是说,当程序启动并且稍后连接设备时,在尝试录制声音时会抛出以下异常:

 java.lang.IllegalArgumentException: No line matching interface TargetDataLine supporting format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 …
Run Code Online (Sandbox Code Playgroud)

java audio javasound

6
推荐指数
1
解决办法
3067
查看次数

OSGi应用程序内的REST客户端

我需要将REST客户端集成到使用Apache Felix实现的现有OSGi应用程序中.REST服务基于JAX-RS的RESTeasy实现(版本2.3.2.Final).我创建了一个单独的包,其中包含客户端的依赖项,导出所需的RESTeasy包并将其导入到使用客户端的包中,但遗憾的是我无法在OSGi上下文中使用它.

我尝试了两种不同的方法.第一个使用通用ClientRequest:

ClientRequest request = new ClientRequest(MyService.URL_TEST+"/stats");
request.body(javax.ws.rs.core.MediaType.APPLICATION_XML, stats);
ClientResponse<String> response = request.post(String.class);
Run Code Online (Sandbox Code Playgroud)

我在这种情况下得到的错误非常奇怪:

[java] java.lang.RuntimeException: java.lang.ClassCastException:
org.jboss.resteasy.client.core.executors.ApacheHttpClient4Executor cannot be cast to 
org.jboss.resteasy.client.ClientExecutor
Run Code Online (Sandbox Code Playgroud)

我知道ApacheHttpClient4Executor实现了ClientExecutor接口.

当我尝试在RESTeasy周围使用我自己的REST客户端包装时,如下所示:

MyService myService = MyServiceClient.getInstance();
myService.saveStatistics(stats);
Run Code Online (Sandbox Code Playgroud)

我得到一个不同的例外:

[java] java.lang.LinkageError: ClassCastException: attempting to
castjar:file:/D:/Development/Eclipses/eclipse_4.2_j2ee_x64/lib/jaxrs-api-2.3.2.Final.jar
!/javax/ws/rs/ext/RuntimeDelegate.classtobundle:
//78.0:1/javax/ws/rs/ext/RuntimeDelegate.class
Run Code Online (Sandbox Code Playgroud)

据我所知,LinkageError很可能与RESTeasy使用一些类加载器技巧初始化RuntimeDelegate的方式有关,这可能属于OSGi框架的限制.我怀疑首先提到的java.lang.ClassCastException具有相同的源.

有没有办法让RESTeasy在OSGi中运行?

PS:关于RESTeasy的类似问题的讨论,但在OSGi之外:java.lang.LinkageError:ClassCastException

更新: 这些是包含在restclient包中的:activation-1.1.jar commons-codec-1.2.jar commons-httpclient-3.1.jar commons-io-2.1.jar commons-logging-1.0.4.jar flexjson-2.1. jar httpclient-4.1.2.jar httpcore-4.1.2.jar javassist-3.12.1.GA.jar jaxb-api-2.2.3.jar jaxb-impl-2.2.4.jar jaxrs-api-2.3.2. Final.jar jcip-annotations-1.0.jar jettison-1.3.1.jar jsr250-api-1.0.jar junit-4.10.jar log4j-1.2.14.jar resteasy-jaxb-provider-2.3.2.Final.jar resteasy -jaxrs-2.3.2.Final.jar resteasy-jettison-provider-2.3.2.Final.jar scannotation-1.0.3.jar slf4j-api-1.6.4.jar slf4j-log4j12-1.6.4.jar myservice- common-0.1.0.3.jar my-service-client-0.1.0.3-SNAPSHOT.jar stax-api-1.0-2.jar xmlpull-1.1.3.1.jar xpp3_min-1.1.4c.jar xstream-1.4.2.jar …

java osgi web-services resteasy apache-felix

6
推荐指数
1
解决办法
2963
查看次数

标签 统计

java ×2

apache-felix ×1

audio ×1

javasound ×1

osgi ×1

resteasy ×1

web-services ×1