If you are looking for the decompiler itself, visit https://github.com/jindrapetrik/jpexs-decompiler
NEW : We have got a new blog where we post some interesting SWF internals info.

#2483 Cannot save DefineShape4 with more than 2 gradient records
Author:
kjarosh

Date created:
Type: bug
Visibility: Everybody
Assigned to:
State: new 

> What steps will reproduce the problem?
> What is the expected output? What do you see instead?
> What version of the product are you using? Is it "nightly build"? Which operating system
do you have?
> Please provide any additional information below. If the problem is related to a SWF
file, attach it here, otherwise we can't help you.

Hi, sorry, I messed up creating the issue!
> What steps will reproduce the problem?
1. Open the attached test.swf file
2. Go to DefineShape4
3. Edit it
4. Go to fillStyle[0]
5. Add a new gradient record
6. Try saving it
> What is the expected output? What do you see instead?
It should be saved, but nothing happens. I can see an error in logs
08/07/2025 20:06:46 SEVERE Uncaught exception in thread: AWT-EventQueue-0
java.lang.ClassCastException
> What version of the product are you using? Is it "nightly build"? Which operating
system
do you have?
22.0.2, Flatpak version
The bug is reproducible in 24.0.1 too:
08/07/2025 20:21:25 SEVERE Uncaught exception in thread: AWT-EventQueue-0
java.lang.ClassCastException: com.jpexs.decompiler.flash.types.RGB cannot be cast to
com.jpexs.decompiler.flash.types.RGBA
at com.jpexs.decompiler.flash.SWFOutputStream.writeGRADRECORD(SWFOutputStream.java:1408)
at com.jpexs.decompiler.flash.SWFOutputStream.writeGRADIENT(SWFOutputStream.java:1394)
at com.jpexs.decompiler.flash.SWFOutputStream.writeFILLSTYLE(SWFOutputStream.java:1327)
at
com.jpexs.decompiler.flash.SWFOutputStream.writeFILLSTYLEARRAY(SWFOutputStream.java:1361)
at
com.jpexs.decompiler.flash.SWFOutputStream.writeSHAPEWITHSTYLE(SWFOutputStream.java:1549)
at com.jpexs.decompiler.flash.tags.DefineShape4Tag.getData(DefineShape4Tag.java:109)
at com.jpexs.decompiler.flash.tags.Tag.getData(Tag.java:663)
at com.jpexs.decompiler.flash.tags.Tag.cloneTag(Tag.java:585)
at
com.jpexs.decompiler.flash.gui.GenericTagTreePanel.setEditMode(GenericTagTreePanel.java:12
76)
at
com.jpexs.decompiler.flash.gui.PreviewPanel.saveDisplayEditTag(PreviewPanel.java:2653)
at
com.jpexs.decompiler.flash.gui.PreviewPanel.saveDisplayEditTagButtonActionPerformed(Previe
wPanel.java:2705)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:262)
at
org.pushingpixels.substance.internal.utils.RolloverButtonListener.mouseReleased(RolloverBu
ttonListener.java:124)
at java.awt.Component.processMouseEvent(Component.java:6539)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6304)
at java.awt.Container.processEvent(Container.java:2239)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
at java.awt.Container.dispatchEventImpl(Container.java:2283)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDo
main.java:74)
at
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDo
main.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:733)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.security.AccessController.doPrivileged(Native Method)
at
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDo
main.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)