Der Swing Timer funktioniert einwandfrei. Ich dachte ursprünglich, dass das Problem am Timer liegt.
Da unter Windows die Software einwandfrei lief und unter Ubuntu das Ruckeln auftrat, vermutet ich das das Problem an der Event Queue liegt und der Timer schuld hat. Ich versuchte es unter Linux mit der schnellsten Prozesspriorität und vielen anderen Dingen ohne Erfol. Durch einen Zufall stieß ich auf die obige Lösung.
Unter Swing ist die richtige Verwendung des Timer wichtig um gute Ergebnisse zu erhalten.
1) Zeichenoperationen immer mittels paintComponent() und niemals mit paint() ausführen
weil Swing beim Zeichnen eine Menge Dinge erledigt und paint irgendwo dazwischen aufgerufen wird.
Der Swing Timer ruft die Methode ActionListener auf und das passiert am Ende der Zeichenoperationen.
Wenn man sich daran hält läuft er sehr exakt. Ich verwende eine kleine Klasse um Grafiken animiert darzustellen. Die sehr gut arbeitet. Das Problem war unter Ubuntu das Open GL deaktiviert ist. Da das Zeichnen der Grafiken zu lange dauerte, wurde das nächste Timer Event ausgelöst und die nächste Zeichen Operation sollte ausgeführt werden bevor die vorige fertig war. So entstand das Flackern.
Aber durch das Aktivieren von Open GL funktioniert es jetzt sehr gut.