Hallo,
ich habe eine Klasse die einen Farbverlauf darstellen soll. Einzelne Farben(RGB, jeweils 0-255) sind in dem Array color abgespeichert, bei Aufruf der Klasse verlauf soll durch Veränderung der RGB werte von einem Farbpunkt zum anderen "gewandert" werden.
Wichtig hierbei ist, dass die Abläufe der drei Werte synchron geschehen.
Hierfür habe ich timer eingebaut, die gleichzeitig starten und eigentlich, durch geeignete Wahl der Intervalle, auch gleichzeitig beendet werden sollten. Mein Problem ist dass die timer eben nicht gleichzeitig fertig sind und kann mir nicht erklären woran das liegt.
durch
wird die Klasse
aufgerufen.
Die TimerTask Klasse:
die Klassen changeGreen und changeBlue sind genauso aufgebaut.
Kann es sein dass der timer nicht in millisekunden intervallen arbeiten kann?
Kann mir jemand bei meinem Problem helfen bitte?
ich habe eine Klasse die einen Farbverlauf darstellen soll. Einzelne Farben(RGB, jeweils 0-255) sind in dem Array color abgespeichert, bei Aufruf der Klasse verlauf soll durch Veränderung der RGB werte von einem Farbpunkt zum anderen "gewandert" werden.
Wichtig hierbei ist, dass die Abläufe der drei Werte synchron geschehen.
Hierfür habe ich timer eingebaut, die gleichzeitig starten und eigentlich, durch geeignete Wahl der Intervalle, auch gleichzeitig beendet werden sollten. Mein Problem ist dass die timer eben nicht gleichzeitig fertig sind und kann mir nicht erklären woran das liegt.
durch
Java:
Thread t1 = new Thread(new verlauf(anzeigeGross));
t1.start();
wird die Klasse
Java:
public class verlauf implements Runnable{
JTextField tf = new JTextField();
private long zeitR;
private long zeitG;
private long zeitB;
private long startTime;
public verlauf(JTextField jtf)
{
this.tf = jtf;
}
@Override
public void run()
{
i=0;
tf.setBackground(color[i]);
for (i=0 ; ((color[i+1]!=null));i++){
System.out.println();
System.out.println();
System.out.println("i:"+i);
int diffR = color[i].getRed()-color[i+1].getRed();
if (diffR<0) diffR = diffR * (-1);
System.out.println("diffR: "+diffR);
int diffG = color[i].getGreen()-color[i+1].getGreen();
if (diffG<0) diffG = diffG * (-1);
System.out.println("diffG: "+diffG);
int diffB = color[i].getBlue()-color[i+1].getBlue();
if (diffB<0) diffB = diffB * (-1);
System.out.println("diffB: "+diffB);
zeit = 30;
if(diffR==0) zeitR = 0;
else zeitR = (long) ((zeit*1000)/diffR);
if(diffG==0) zeitG = 0;
else zeitG = (long) ((zeit*1000)/diffG);
if(diffB==0) zeitB = 0;
else zeitB = (long) ((zeit*1000)/diffB);
System.out.println("zeitR: "+zeitR);
System.out.println("zeitG: "+zeitG);
System.out.println("zeitB: "+zeitB);
System.out.println();
Timer timerR = new Timer();
Timer timerG = new Timer();
Timer timerB = new Timer();
changeRed cr = new changeRed(tf, color[i], color[i+1]);
changeGreen cg = new changeGreen(tf, color[i], color[i+1]);
changeBlue cb = new changeBlue(tf, color[i], color[i+1]);
startTime = System.currentTimeMillis();
cr.setStartTime(startTime);
cg.setStartTime(startTime);
cb.setStartTime(startTime);
System.out.println("startTime: "+startTime);
if(zeitR!=0) timerR.schedule(cr,0, zeitR);
if(zeitG!=0) timerG.schedule(cg,0, zeitG);
if(zeitB!=0) timerB.schedule(cb,0, zeitB);
try {
Thread.sleep(zeit*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
aufgerufen.
Die TimerTask Klasse:
Java:
public class changeRed extends TimerTask{
JTextField tf = new JTextField();
int red1;
int red2;
private Color farbe1;
private Color farbe2;
private long stopTime;
private long startTime;
private long runTime;
public changeRed(JTextField tf, Color farbe, Color farbe2)
{
this.tf = tf;
this.farbe1=farbe; //in Farbe1 wird die Anfangsfarbe gespeichert
this.farbe2=farbe2; //in Farbe2 wird die Endfarbe gespeichert
}
@Override
public void run() {
farbe1 = tf.getBackground();
red1=farbe1.getRed();
red2=farbe2.getRed();
if(red1<red2){
red1++;
if(red1>=red2) { //Abbruchfunktion
stopTime = System.currentTimeMillis();
System.out.println("ROT stopTime: "+stopTime);
runTime = (stopTime - startTime);
System.out.println("ROT runTime: "+runTime);
this.cancel();
}
}
if(red1>red2){
red1--;
if(red1<=red2) { //Abbruchfunktion
stopTime = System.currentTimeMillis();
System.out.println("ROT stopTime: "+stopTime);
runTime = (stopTime - startTime);
System.out.println("ROT runTime: "+runTime);
this.cancel();
}
}
if (red1==red2){
this.cancel();
}
farbe1 = new Color(red1,farbe1.getGreen(),farbe1.getBlue());
tf.setBackground(farbe1);
}
public long getRunTime() {
return runTime;
}
public void setStartTime(long startTime) {
this.startTime = startTime;
}
die Klassen changeGreen und changeBlue sind genauso aufgebaut.
Kann es sein dass der timer nicht in millisekunden intervallen arbeiten kann?
Kann mir jemand bei meinem Problem helfen bitte?