In order to make SwingTimer accurate, I like the logic and example suggested by @Tony Docherty On CR. Here is the Link.
SwingTimer
In order to highlight the given
Have you considered java.util.Timer and scheduleAtFixedRate? You will need a little extra work to do stuff on the EDT, but it should fix the issue of accumulated delays.