博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
activiti 5.13流程图连线名称不显示bug修复
阅读量:2119 次
发布时间:2019-04-30

本文共 2461 字,大约阅读时间需要 8 分钟。

使用modeler设计器,流程图连线名称是有显示的,但是运行结果却没显示。

找到网上2遍文章,说是activiti框架中的一个bug,要修改
DefaultProcessDiagramGenerator类的代码:
https://blog.csdn.net/fgstudent/article/details/39916003
http://www.shareniu.com/article/61.htm

// Draw sequenceflow label

GraphicInfo labelGraphicInfo = bpmnModel.getLabelGraphicInfo(sequenceFlow.getId
());
if (labelGraphicInfo != null) {
processDiagramCanvas.drawLabel(sequenceFlow.getName(), labelGraphicInfo, false);
}
修改为:
// Draw sequenceflow label
GraphicInfo labelGraphicInfo = bpmnModel.getLabelGraphicInfo(sequenceFlow.getId
());
if (labelGraphicInfo != null) {
processDiagramCanvas.drawLabel(sequenceFlow.getName(), labelGraphicInfo, false);
}else {
GraphicInfo lineCenter = getLineCenter(graphicInfoList);
processDiagramCanvas.drawLabel(sequenceFlow.getName(), lineCenter, false); 
}

但是上面文章的activiti版本是5.16、5.22,本人项目用的是5.13(jdk为1.6),没有
DefaultProcessDiagramGenerator类,而是ProcessDiagramGenerator类,而且方法
drawLabel也不支持上面3个参数,需要5个参数,经过一番测试,终于解决。
下面是整个修改过程:
1、用反编译工具jd-gui把项目的所有activiti的jar包反编译保存为源码;

2、在eclipse中新建一个项目,把源码放进去(jdk和项目保持一致设为1.6,刚开始设为1.8

,结果运行提示有错误),代码在eclipse提示有错误的话,可不理会,只要项目会生成
class文件就行。

3、在eclipse中打开类ProcessDiagramGenerator(对应包为activiti-engine-5.13.jar),

找到代码
if (!drawedLabel) {
GraphicInfo labelGraphicInfo = bpmnModel.getLabelGraphicInfo(sequenceFlow.getId
());
if (labelGraphicInfo != null) {
  int middleX = (int)((previousGraphicInfo.getX() + labelGraphicInfo.getX() +
(graphicInfo.getX() + labelGraphicInfo.getX())) / 2.0D);
  int middleY = (int)((previousGraphicInfo.getY() + labelGraphicInfo.getY() +
(graphicInfo.getY() + labelGraphicInfo.getY())) / 2.0D);
  middleX += 15;
  processDiagramCanvas.drawLabel(sequenceFlow.getName(), middleX, middleY, (int)
labelGraphicInfo.getWidth(), (int)labelGraphicInfo.getHeight());
  drawedLabel = true;
}
修改为
if (!drawedLabel) {
GraphicInfo labelGraphicInfo = bpmnModel.getLabelGraphicInfo(sequenceFlow.getId
());
if (labelGraphicInfo != null) {  
  processDiagramCanvas.drawLabel(sequenceFlow.getName(), (int)
labelGraphicInfo.getX(), (int)labelGraphicInfo.getY(), (int)
labelGraphicInfo.getWidth(), (int)labelGraphicInfo.getHeight());
  drawedLabel = true;
}
保存,Eclipse会自动编译,生成class文件,可看到ProcessDiagramGenerator.class,
ProcessDiagramGenerator$1.class至ProcessDiagramGenerator$20.class、
ProcessDiagramGenerator$ActivityDrawInstruction.class自动修改保存。

4、右键activiti-engine-5.13.jar用压缩软件如WinRAR打开,定位到

ProcessDiagramGenerator.class的所在位置,把第3步的class文件直接拖进去替换掉。

5、把第4步activiti-engine-5.13.jar替换现在项目的相应文件;

结束。

你可能感兴趣的文章
如何分析SQL语句
查看>>
结构化查询语言(SQL)原理
查看>>
SQL教程之嵌套SELECT语句
查看>>
几个简单的SQL例子
查看>>
日本語の記号の読み方
查看>>
计算机英语编程中一些单词
查看>>
JavaScript 经典例子
查看>>
判断数据的JS代码
查看>>
js按键事件说明
查看>>
AJAX 初次体验!推荐刚学看这个满好的!
查看>>
AJAX 设计制作 在公司弄的 非得要做出这个养的 真晕!
查看>>
AJAX 自己研究玩的
查看>>
javascript(js)数组操作
查看>>
用JavaScript脚本实现Web页面信息交互
查看>>
window 窗口对象操作
查看>>
公司一位老员工愤然离去的留信!崩溃!
查看>>
C#技巧:网页表单自动填写技术(以gmail为例)
查看>>
C#基础概念二十五问
查看>>
C#在Excel中将连续多列相同数据项合并
查看>>
C#如何把html中的相对路径变成绝对路径
查看>>