小编Rah*_*ner的帖子

JDiagram旧版本在ExtendedArrayList.sort中使用JRE 8抛出StackOverflowError

我正在使用JDiagram JAR,如下所示

Diagram myDigram = new Diagram();
    myDigram.routeAllLinks();
Run Code Online (Sandbox Code Playgroud)

使用JRE 7运行时此代码可以正常工作,但是当它与JRE 8一起运行时,会抛出以下错误:

java.lang.StackOverflowError
    at java.util.Collections.sort(Unknown Source)
    at com.mindfusion.common.ExtendedArrayList.sort(Unknown Source)
    at java.util.Collections.sort(Unknown Source)
    at com.mindfusion.common.ExtendedArrayList.sort(Unknown Source)
    at java.util.Collections.sort(Unknown Source)
    at com.mindfusion.common.ExtendedArrayList.sort(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

我跟着堆栈跟踪到JDiagram反编译代码.观察到routeAllLinks()在另一个对象(比如路由器)上调用RouteLinks(),并且在另一个级别深度调用错误堆栈跟踪中出现的ExtendedArrayList.sort().JDiagram中的"ExtendedArrayList"扩展了ArrayList,并包含一个名为"sort()"的方法,该方法具有以下定义.

  public void sort(Comparator<? super T> paramComparator)
  {
    Collections.sort(this, paramComparator);
  }
Run Code Online (Sandbox Code Playgroud)

在Google上,我发现JRE 8引入了List.sort()并将Collections.sort()调用委托给集合(在我的情况下为ExtendedArrayList)排序方法.因此,库ExtendedArrayList.sort()成为了一个覆盖.它会创建一个无限递归,从而导致stackoverflow.我现在可以用一小段代码重现这个问题.

  • 我们创建JDiagram对象的原始类在运行时由我们产品中的其他组件加载.我们对程序的加载几乎没有控制权.
  • 我们发现最新版本的JDiagram通过用sortJ7()方法替换sort()来解决这个问题.但是,此时我们无法升级库.JDiagram是一个许可的API.
  • ExtendedArrayList由JDiagram在内部实例化,因此我们无法从代码中更改它.

我们尝试过以下目前无效的解决方案

  • Java代理:因为我们的代码不直接调用ExtendedArrayList而且'Diagram'没有任何接口.
  • Spring AOP:我们没有使用spring,我们的程序也被其他组件加载运行时.
  • AspectJ:到目前为止,这显然是一个解决方案.但是,它也没有用,因为我们无法在运行时编写程序.不确定是否有人可以使它工作.

如果有任何要点需要详细说明,请告诉我.欢迎任何帮助.谢谢.

更新 到目前为止,javassist是最好的方法,但JDiagram混淆是阻止解决方案正常工作.我们有点认为考虑到我们的发布日期是不可能的(不得不说).我们已经开始升级库的过程.同时从我们的应用程序中删除了一个由routeAllLinks()方法提供的小功能.. :-(感谢大家的帮助.我将继续研究这个问题,因为我发现它真的很有趣和挑战..我如果我能解决它,我会更新帖子.而且我将继续为@gontard提供他的javassist方法,因为我正在继续我的研究.谢谢.

java collections arraylist java-8 default-method

11
推荐指数
1
解决办法
440
查看次数

在使用Java 8的Solaris上,Swing JButton无法正确呈现

我已从Windows机器连接到Solaris 11.我已将DISPLAY设置为我的机器.我正在使用Java 8.

注意:使用Java 6时,这很好用.

当我启动对话框时,它的按钮和其他摆动组件不会被渲染.

观察到它适用于Windows 7企业版或Windows Server 2012企业版

我尝试改变L&F但是没有用.当我使用"GTKLookAndFeel"时,按钮出现但没有文字/标签.

任何帮助是极大的赞赏.如果需要任何详细说明,请告诉我.谢谢.

我的对话框的代码如下

package com.ui;


import javax.swing.SwingUtilities;


public class SimpleDialog extends java.awt.Dialog {
    private static final long serialVersionUID = -8298472889742780386L;
    public SimpleDialog(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents …
Run Code Online (Sandbox Code Playgroud)

java swing solaris awt java-8

7
推荐指数
1
解决办法
201
查看次数

在网址中提供jwt令牌是一个好主意吗?

我需要在我们的应用程序之一中进行JSONP REST调用。为了进行身份验证,我必须在url中提供JWT令牌。

通过这篇文章,我对它的安全性有了一些了解。

将jwt用作GET请求的查询参数是否安全?

但是,我想了解更多有关如何以更安全的方式向JSONP提供JWT令牌的信息。

我可能无法提供有关我的应用程序的更多详细信息,但相信我我们没有使用JSONP来满足某些特定需求。

非常感谢。

security authentication rest jsonp jwt

0
推荐指数
1
解决办法
1039
查看次数