当前位置: 首页 > 知识库问答 >
问题:

Java AmazonS3 客户端构造函数失败

蔚学林
2023-03-14

我有一个小程序,其方法从浏览器中的JavaScript函数调用。该方法最终将文件发送到AmazonS3 bucket。但是,当该方法尝试创建AmazonS3Client时,该方法失败,不会显示任何错误。

该方法中代码的相关代码片段是:

InputStream input = DigitalLive.class.getResourceAsStream("AwsCredentials.properties");
System.out.println("File loaded into Input Stream.");

PropertiesCredentials theCredentials = new PropertiesCredentials(input);
System.out.println("Credentials created.");
System.out.println("AccessKey is:" + theCredentials.getAWSAccessKeyId());
System.out.println("SecretKey is:" + theCredentials.getAWSSecretKey());

//All of the above strings print to the console with the correct AccessKey and SecretKey
try{
    AmazonS3 s3Client = new AmazonS3Client(theCredentials);
    //This message never prints
    System.out.println("Client created."); 
} catch(Exception e) {
    //This message never prints
    System.err.println("Error creating AmazonClient: " + e.getMessage());
}

try/catch块中的任何消息都不会打印。方法的其余代码(为简洁起见,此处未显示)也不会被触发。

jar文件编译无误。我用的是jdk 1.7.0_51和amazon aws-java-sdk-1.7.1。我使用Eclipse作为IDE,并使用ANT构建带有构建文件的jar。

除了在try/catch块中包装代码之外,我真的不确定还可以尝试什么。有没有其他更好的方法来调试Java代码,以了解为什么没有创建AmazonS3Client?或者,考虑到上面的代码片段,这可能是失败的一个更明显的原因?

编辑:我在调用Java方法的JavaScript代码中添加了一个try/catch块,它会抛出一个错误:

Error calling method on NPObject
Error: java.lang.reflect.InvocationTargetException

我认为这告诉我Java小程序实际上是在抛出一个错误。我只是不知道如何找出其中的一个,以及如何解决它。我尝试在AmazonS3 s3Client=new AmazonS3Client周围放置try/catch块(必要)但是IDE告诉我调用TargetException的捕获块<code>不可访问。从不从try语句体引发此异常。

共有1个答案

伍弘盛
2023-03-14

事实证明,当从JavaScript内部调用该方法时,错误消息没有被写入控制台。我修改了Applet,以便可以从Applet中调用该方法,错误如预期的那样显示在控制台中。

Applet缺少一个Apache类,所以添加了它,一切都很好。

 类似资料:
  • 假设Component-TODOList需要以两种不同的方式显示TODO的列表,listview和gridview。假设我想保持两个视图作为不同的组件,那么最佳实践是什么- > 使用graphql查询创建TodoList组件,然后将查询结果传递给TODOListView和TODOGridView组件? 创建没有graphql查询的TodoList组件,然后在ToDoListView和TODOGri

  • 编辑:需要知道如何创建由Textview填充的

  • JavaScript 中的构造函数和其它语言中的构造函数是不同的。 通过 new 关键字方式调用的函数都被认为是构造函数。 在构造函数内部 - 也就是被调用的函数内 - this 指向新创建的对象 Object。 这个新创建的对象的 prototype 被指向到构造函数的 prototype。 如果被调用的函数没有显式的 return 表达式,则隐式的会返回 this 对象 - 也就是新创建的对象

  • 主要内容:默认拷贝构造函数拷贝和复制是一个意思,对应的英文单词都是 。 对于计算机来说,拷贝是指用一份原有的、已经存在的数据创建出一份新的数据,最终的结果是多了一份相同的数据。例如,将 Word 文档拷贝到U盘去复印店打印,将 D 盘的图片拷贝到桌面以方便浏览,将重要的文件上传到百度网盘以防止丢失等,都是「创建一份新数据」的意思。 在 C++ 中,拷贝并没有脱离它本来的含义,只是将这个含义进行了“特化”,是指用已经存在的对

  • 主要内容:1、实例构造函数,2、静态构造函数,3、私有构造函数在 C# 中,构造函数就是与类(或结构体)具有相同名称的成员函数,它在类中的地位比较特殊,不需要我们主动调用,当创建一个类的对象时会自动调用类中的构造函数。在程序开发的过程中,我们通常使用类中的构造函数来初始化类中的成员属性。 C# 中的构造函数有三种: 实例构造函数; 静态构造函数; 私有构造函数。 1、实例构造函数 构造函数是类中特殊的成员函数,它的名称与它所在类的名称相同,并且没有返回值。当

  • 主要内容:构造函数的重载,默认构造函数在 C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是 构造函数(Constructor)。 在《 C++类成员的访问权限以及类的封装》一节中,我们通过成员函数 setname()、setage()、setscore() 分别为成员变量 name、age、score 赋值,这样做虽然有效,但显得有点