有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Javax内容不可访问

我尝试运行安卓应用程序时出现运行时错误,原因是导入了允许我使用Watson服务的软件包

'com。国际商用机器公司沃森。开发者云:java sdk:2.9.0'

事实上,当我使用与此包相关的内容时,出现的错误是:

E/dalvikvm: Could not find class 'javax.naming.InitialContext', referenced from method com.ibm.watson.developer_cloud.util.CredentialUtils.getKeyUsingJNDI

对应的stacktrace为:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: semantic.myapplication, PID: 29120
java.lang.VerifyError: com/ibm/watson/developer_cloud/util/CredentialUtils
at….

我查找了这个错误的真正问题,发现在出现错误的文件“CredentialUtils.java”中,这三个导入未被识别(无法解析符号):

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

我使用Android Studio和最新版本的jdk(1.8.0.77)。这些java文件是存在的,我可以看到它们,但由于某些原因无法访问:在javax中导入每个文件。无法命名(以及其他文件夹)

我怎样才能解决这个问题?我试着导入一个新的。jar文件,包括javax。命名类,但不起作用。有没有办法让这些类可见

任何帮助都将不胜感激。谢谢


共 (1) 个答案

  1. # 1 楼答案

    我认为您使用的版本比2.7.1旧。我无法重现您的问题,我尝试了不同的配置,包括您的配置。 确保清理工作区并获取最新版本的库。 在你的build.gradle中,你应该有:

    compile 'com.ibm.watson.developer_cloud:java-sdk:2.9.0'
    

    这是修复您问题的commit。修复程序是在2.7.1版本中发布的

    这就是我所做的,也为我工作:

    在Android中使用Watson API的步骤您应该:

    1. 下载并安装Android Studio
    2. 开放Android Studio
    3. File > New > New Project
    4. 选择一个名称,然后单击nextnextnextFinish
    5. <project-name>/app/build.gradle中添加:

      compile 'com.ibm.watson.developer_cloud:java-sdk:2.9.0'  
      
    6. MainActiviy.javaonCreate(...)末尾添加:

      Thread thread = new Thread(new Runnable(){
        @Override
        public void run() {
          try {
            SpeechToText service = new SpeechToText();
            service.setUsernameAndPassword("<username>", "<password>");
            System.out.println(service.getModels());
          } catch (Exception e) {
            e.printStackTrace();
          }
        }
      });
      
      thread.start();
      
    7. 启动模拟器并查看控制台。你应该看到这样的消息

      I/CredentialUtils: JNDI string lookups is not available.
      

      以及语音到文本模型列表

      I/System.out: [{
      I/System.out:   "name": "en-US_NarrowbandModel",
      I/System.out:   "rate": 8000
      I/System.out: }, {
      I/System.out:   "name": "pt-BR_BroadbandModel",
      I/System.out:   "rate": 16000
      I/System.out: }, {
      I/System.out: .... more models here
      I/System.out: }, {
      I/System.out:   "name": "en-US_BroadbandModel",
      I/System.out:   "rate": 16000
      I/System.out: }]