JavaFX AnimationTimer running too fast (0.5ms between calls)
I tried to resize a stage with an AnimationTimer. It is very stuttery (maybe 1-2fps). So I printed out the elapsed time between the calls of handle(). It is only 0.5ms. It should be about 7ms for a 144hz screen and 16 for a 60hz one.
I have a 144hz screen and a 60hz screen connected to the pc and I am using Windows 10.
Probably it is stuttering because setHeight is called almost 2k times per second.
Here is some code:
AnimationTimer animationTimer = new AnimationTimer() {
long lastTime;
@Override
public void handle(long now) {
animationHeight++;
setHeight(animationHeight);
System.out.println(now - lastTime);
lastTime = now;
if (animationHeight >= totalHeight) {
stop();
}
}
};
animationTimer.start();
Console output:
...
584303
578683
514300
481597
...
I tried to do the same thing with a java.util.Timer.
I scheduled the timer every 7ms which results in a more or less smooth animation. It obviously not completely smoothm, because the 7ms are a little off and not synched to the screen.
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
animationHeight += 8;
if (animationHeight >= totalHeight) {
setHeight(totalHeight);
cancel();
}
setHeight(animationHeight);
}
};
Timer timer = new Timer();
timer.scheduleAtFixedRate(timerTask, 0, 7);
What am I doing wrong with the AnimationTimer?
java animation javafx stage
add a comment |
I tried to resize a stage with an AnimationTimer. It is very stuttery (maybe 1-2fps). So I printed out the elapsed time between the calls of handle(). It is only 0.5ms. It should be about 7ms for a 144hz screen and 16 for a 60hz one.
I have a 144hz screen and a 60hz screen connected to the pc and I am using Windows 10.
Probably it is stuttering because setHeight is called almost 2k times per second.
Here is some code:
AnimationTimer animationTimer = new AnimationTimer() {
long lastTime;
@Override
public void handle(long now) {
animationHeight++;
setHeight(animationHeight);
System.out.println(now - lastTime);
lastTime = now;
if (animationHeight >= totalHeight) {
stop();
}
}
};
animationTimer.start();
Console output:
...
584303
578683
514300
481597
...
I tried to do the same thing with a java.util.Timer.
I scheduled the timer every 7ms which results in a more or less smooth animation. It obviously not completely smoothm, because the 7ms are a little off and not synched to the screen.
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
animationHeight += 8;
if (animationHeight >= totalHeight) {
setHeight(totalHeight);
cancel();
}
setHeight(animationHeight);
}
};
Timer timer = new Timer();
timer.scheduleAtFixedRate(timerTask, 0, 7);
What am I doing wrong with the AnimationTimer?
java animation javafx stage
add a comment |
I tried to resize a stage with an AnimationTimer. It is very stuttery (maybe 1-2fps). So I printed out the elapsed time between the calls of handle(). It is only 0.5ms. It should be about 7ms for a 144hz screen and 16 for a 60hz one.
I have a 144hz screen and a 60hz screen connected to the pc and I am using Windows 10.
Probably it is stuttering because setHeight is called almost 2k times per second.
Here is some code:
AnimationTimer animationTimer = new AnimationTimer() {
long lastTime;
@Override
public void handle(long now) {
animationHeight++;
setHeight(animationHeight);
System.out.println(now - lastTime);
lastTime = now;
if (animationHeight >= totalHeight) {
stop();
}
}
};
animationTimer.start();
Console output:
...
584303
578683
514300
481597
...
I tried to do the same thing with a java.util.Timer.
I scheduled the timer every 7ms which results in a more or less smooth animation. It obviously not completely smoothm, because the 7ms are a little off and not synched to the screen.
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
animationHeight += 8;
if (animationHeight >= totalHeight) {
setHeight(totalHeight);
cancel();
}
setHeight(animationHeight);
}
};
Timer timer = new Timer();
timer.scheduleAtFixedRate(timerTask, 0, 7);
What am I doing wrong with the AnimationTimer?
java animation javafx stage
I tried to resize a stage with an AnimationTimer. It is very stuttery (maybe 1-2fps). So I printed out the elapsed time between the calls of handle(). It is only 0.5ms. It should be about 7ms for a 144hz screen and 16 for a 60hz one.
I have a 144hz screen and a 60hz screen connected to the pc and I am using Windows 10.
Probably it is stuttering because setHeight is called almost 2k times per second.
Here is some code:
AnimationTimer animationTimer = new AnimationTimer() {
long lastTime;
@Override
public void handle(long now) {
animationHeight++;
setHeight(animationHeight);
System.out.println(now - lastTime);
lastTime = now;
if (animationHeight >= totalHeight) {
stop();
}
}
};
animationTimer.start();
Console output:
...
584303
578683
514300
481597
...
I tried to do the same thing with a java.util.Timer.
I scheduled the timer every 7ms which results in a more or less smooth animation. It obviously not completely smoothm, because the 7ms are a little off and not synched to the screen.
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
animationHeight += 8;
if (animationHeight >= totalHeight) {
setHeight(totalHeight);
cancel();
}
setHeight(animationHeight);
}
};
Timer timer = new Timer();
timer.scheduleAtFixedRate(timerTask, 0, 7);
What am I doing wrong with the AnimationTimer?
java animation javafx stage
java animation javafx stage
asked Nov 24 '18 at 6:02
NuclearVirusNuclearVirus
405
405
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53455597%2fjavafx-animationtimer-running-too-fast-0-5ms-between-calls%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53455597%2fjavafx-animationtimer-running-too-fast-0-5ms-between-calls%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown