小编pha*_*99w的帖子

使用JUnit 4注释测试多个异常

是否可以在单个JUnit单元测试中测试多个异常?例如,我知道可以使用一个例外

    @Test(expected=IllegalStateException.class)
Run Code Online (Sandbox Code Playgroud)

现在,如果我想测试另一个异常(例如,NullPointerException),可以在相同的注释,不同的注释中完成吗,还是我需要完全编写另一个单元测试?

java junit exception

26
推荐指数
3
解决办法
4万
查看次数

Java编译器无法识别静态内部类

这是一个非常复杂的错误,所以请耐心等待.

我在尝试编译一些Java代码时看到了一个奇怪的错误.编译器无法识别静态内部类.让我们说我正在上课MyClass.我需要使用的静态内部类具有FQN x.y.z.Parent.DesiredClass.使用其FQN显式导入此内部类.父级也使用其FQN导入.现在存在另一个包含(另一个,不同的FQN)的包,它有一个类DesiredClass.此其他DesiredClass位于类路径中,但未显式导入.

在继续之前,我应该明确表示无法更改这些类的名称.

现在,当我引用Parent.DesiredClass在我的代码,我使用FQNParent.DesiredClass,以避免任何可能的歧义.但是当我编译时,我尝试实例化时遇到错误Parent.DesiredClass.我的代码片段:

x.y.z.Parent.DesiredClass dc;
dc = new x.y.z.Parent.DesiredClass();
Run Code Online (Sandbox Code Playgroud)

这会产生以下编译时错误:

MyClass.java:123: an enclosing instance that contains x.y.z.Parent.DesiredClass is required
   dc = new x.y.z.Parent.DesiredClass();
           ^
Run Code Online (Sandbox Code Playgroud)

值得注意的是,链接的类是使用不同的Java编译器编译的:

  • MyClass 旨在使用Sun Java 1.4.2_18进行编译
  • x.y.z.Parent.DesiredClass其他 DesiredClass使用编译微软的Java.

遗憾的是,再次使用更现代的Java版本无法重新编译这些类.

此外,当实际尝试使用Sun Java 1.4.2_18进行编译时,编译器中会发生以下异常:

An exception has occurred in the compiler (1.4.2_18). Please file a bug at the Java Developer Connection (http://java.sun.com/cgi-bin/bugreport.cgi)  after checking the …
Run Code Online (Sandbox Code Playgroud)

java compiler-construction static inner-classes

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

将软件版本附加到JAR文件名

我想附加一个Netbeans项目的输出JAR文件名,其中包含一些版本号:类似于1.0,2.0b或甚至是Subversion版本号.不过,我似乎无法找到任何相关信息.我也不确定这是否是构建系统(Ant)的责任,或者IDE(Netbeans)是否可以委派该过程.这样做有一个集中,干净的方式吗?

java ant netbeans

4
推荐指数
2
解决办法
2317
查看次数

尝试使用Java解密时出现"错误的算法"错误

我首先要描述我遇到的问题,然后给出一些我想要做的背景.最后,我将粘贴一些相关的代码片段.

我正在尝试使用/sf/answers/69468941/中指定的方法实现密钥加密/解密.如果我按原样使用该示例,它可以工作(虽然我确实注意到我需要重新实例化Cipher该类,否则解密会产生垃圾).但是,在我的实现中,我得到以下异常:

java.security.InvalidKeyException: Wrong algorithm: AES or Rijndael required
    at com.sun.crypto.provider.AESCrypt.init(AESCrypt.java:77)
    at com.sun.crypto.provider.CipherBlockChaining.init(CipherBlockChaining.java:91)
    at com.sun.crypto.provider.CipherCore.init(CipherCore.java:469)
    at com.sun.crypto.provider.AESCipher.engineInit(AESCipher.java:217)
    at javax.crypto.Cipher.implInit(Cipher.java:790)
    at javax.crypto.Cipher.chooseProvider(Cipher.java:848)
    at javax.crypto.Cipher.init(Cipher.java:1347)
    at javax.crypto.Cipher.init(Cipher.java:1281)
    at securitytest.SecurityManager.getCipher(SecurityManager.java:175)
    at securitytest.SecurityManager.decryptSecretKey(SecurityManager.java:379)
    at securitytest.SecurityManager.<init>(SecurityManager.java:82)
    at securitytest.Test.main(Test.java:44)
Run Code Online (Sandbox Code Playgroud)

为了击败这个显而易见的问题,是的,我使用相同的算法:实际上,我分配AES/CBC/PKCS5Padding了一个常量并使用它来实例化Cipher加密和解密的类.我也尝试仅使用AES实例化Cipher进行解密,但这也无效.

我想要做的是使用AES/CBC/PKCS5Padding密码保护密钥.我生成一个随机盐和初始化矢量.在加密密钥后,我将初始化向量(字节数组)附加到加密值(也是一个字节数组,创建一个新数组).然后,我在Base64中对此值进行编码,并将其与salt一起存储在Sqlite数据库中(为简单起见,我将其存储为以逗号分隔的值字符串).但是当我尝试解密时,我得到了上述异常.我可以在调用加密方法之后直接验证,并且直接在解密方法之前验证,以下值完全相同(当转换为Base64时,我可以将其打印出来):

  1. 初始化向量
  2. 加密的密钥(即密文)

我已经尝试了Java 6和7:两者都给出了相同的结果.我还排除了无限强度管辖权政策文件的问题.事实上,如果我用另一种算法替换"AES"并相应地调整盐的长度(例如"Blowfish",IV长度为8,产生java.security.InvalidKeyException: Wrong algorithm: Blowfish required),我会得到类似的错误.

谷歌无法帮助我解决这个问题.如果有人能够对此有所了解,我将非常感激.

这里有一些代码片段(我的道歉,它有点粗糙):

private static final int INIT_VECTOR_LENGTH = 16;
private static final int PRIVATE_KEY_LENGTH = 128;
private static final int SALT_LENGTH = …
Run Code Online (Sandbox Code Playgroud)

java sqlite encryption encoding aes

3
推荐指数
1
解决办法
4985
查看次数