我有一个Applet,其方法是从浏览器中的JavaScript函数调用的。此方法最终将文件发送到Amazon S3存储桶。但是,当此方法尝试创建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 Applet实际上是在抛出一个错误。我只是不确定如何弄清楚哪一个以及如何解决它。我试图在AmazonS3 s3Client = new AmazonS3Client(theCredentials);
周围放置try / catch块,但IDE告诉我Unreachable catch block for InvocationTargetException. This exception is never thrown from the try statement body
。
答案 0 :(得分:0)
事实证明,当从JavaScript中调用相关方法时,错误消息未写入控制台。我修改了Applet,以便可以从Applet中调用该方法,并且错误按预期显示在控制台中。
Applet缺少一个Apache类,因此添加了一切,但一切都很顺利。