【问题标题】:Java 16, execution in jar stops in middle of the method without exceptionJava 16,jar中的执行在方法中间停止,无异常
【发布时间】:2021-11-02 18:25:58
【问题描述】:

我的应用程序在一个方法的中间执行停止,例如一个解密方法(我也看到了其他方法)。在 Netbeans (12.3) 中,执行按预期进行。但是当我执行 jar 文件(在 Netbeans 中构建)时,问题就出现了。

例如:

 private void doIt() {
     //log is my own logging class
     log.info("pass: " + decrypt("TKRVAAmZaBuB4vlXQP6aOA=="));
 }

public String decrypt(String strToDecrypt)  {
        try {
            log.info("decrypt()  " + strToDecrypt);
            byte[] iv = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
            log.info("iv: " + iv);
            IvParameterSpec ivspec = new IvParameterSpec(iv);
            log.info("IvParameterSpec ivspec = new IvParameterSpec(iv);");
            SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
            log.info("SecretKeyFactory factory = SecretKeyFactory.getInstance(PBKDF2WithHmacSHA256);");
            KeySpec spec = new PBEKeySpec(SECRET_KEY.toCharArray(), SALT.getBytes(), 65536, 256);
            log.info(" KeySpec spec = new PBEKeySpec(SECRET_KEY.toCharArray(), SALT.getBytes(), 65536, 256);");
            SecretKey tmp = factory.generateSecret(spec);
            log.info("SecretKey tmp = factory.generateSecret(spec);");
            SecretKeySpec secretKey = new SecretKeySpec(tmp.getEncoded(), "AES");
            log.info("SecretKeySpec secretKey = new SecretKeySpec(tmp.getEncoded(),AES);");
            
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
            log.info("Cipher cipher = Cipher.getInstance(AES/CBC/PKCS5PADDING);");
            cipher.init(Cipher.DECRYPT_MODE, secretKey, ivspec);
            log.info(" cipher.init(Cipher.DECRYPT_MODE, secretKey, ivspec);");
            String s = new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));
            log.info("return" + s);
            return s;
        } catch (Exception e) {
            //TODO
            log.logException(StocktransmitterApp.class, e);
        }
        return null;
    }

在jar中执行后记录:

2021-09-05 08:56:22 INFO decrypt()  TKRVAAmZaBuB4vlXQP6aOA==
2021-09-05 08:56:22 INFO iv: [B@3abbfa04
2021-09-05 08:56:22 INFO IvParameterSpec ivspec = new IvParameterSpec(iv);

其他信息

  • Jar 由 Netbeans 构建
  • 该 jar 由 Launch4j exe 调用
  • 该应用程序是一个模块化应用程序
  • JDK 更新到最新版本:16.0.2.7
  • 执行来自自定义 jre(由 jlink 构建)

罐子不稳定

这是一种奇怪的行为。我不知道如何解决 有什么想法或建议吗?

【问题讨论】:

  • log.logException 我知道没有使用该方法的日志记录 API。 您使用的是哪个 API?

标签: java netbeans jar runtime


【解决方案1】:

由于整个执行上下文不清楚:

请注意,Exception 不是唯一可以抛出的东西:可能还有一个 Error,你没有捕捉到它并且可能未被检测到。

具体而言,正如您所说,执行在不同的上下文中起作用:缺少类通常会导致(不可恢复的)错误。第一次检查:抓住Throwable 看看是否有任何改变。一般来说,您对异常的处理是可以的,错误应该在更高级别上捕获 恕我直言

【讨论】:

    【解决方案2】:

    谢谢大家的回复!我找到了问题 首先我抓住了可扔的东西(下一次,我应该先这个)。 带有 java.lang.SecurityException 的 java.lang.ExceptionInInitializerError:无法读取加密策略目录:抛出了无限制

    如果我用谷歌搜索该消息,我发现我的(自定义)JRE 中的 conf(带有安全设置)目录也是必要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-21
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      相关资源
      最近更新 更多