JavaFX faire une pause pendant pour la boucle SANS utiliser de Fil.Sleep()
Je suis ce codage en JavaFX à l'aide d'un FXMLController et la scène du générateur.
Je suis en train de créer un Instagram "liker" la plupart du temps juste pour la pratique en tant que je suis en Informatique, et j'aime tout simplement de codage.
Ma question est, j'ai une boucle de "j'aime" 20 photos pour chaque hashtag, j'ai évidemment besoin d'un retard ou je serais banni plutôt rapidement. L'utilisateur peut choisir le retard, alors je aléatoire de ce délai il n'est pas trop robotique.
La seule façon que j'ai pu utiliser ce retard est à travers le fil.méthode sleep, mais depuis que je suis de codage sur la FXMLController, il gèle l'ensemble de l'INTERFACE utilisateur, et en quelque sorte s'arrête d'autres textareas d'être mis à jour. Ce n'est évidemment pas idéal.
Je l'ai cherché partout, essayant de trouver une alternative à cela, mais je ne peux pas trouver quelque chose qui fonctionne dans mon programme.
Que je vais donner à l'ensemble de la méthode:
private void start() {
sleepWhen();
tagNumber++;
int delays = Integer.valueOf(delay.getText());
delays = delays * 1000;
if (loaded) {
runTime.clear();
runTime.appendText("Liking...");
for (int i = 0; i < 20; i++) {
webEngine.executeScript("document.getElementsByClassName('btn btn-default btn-xs likeButton')[" + i + "].click()");
try {
double random = Math.random() * 1000;
random = random + delays;
delays = (int) random;
System.out.println(delays);
likes++;
likesNumber.clear();
likesNumber.appendText(String.valueOf(likes));
System.out.println(String.valueOf(likes));
Thread.sleep(delays);
delays = Integer.valueOf(delay.getText());
delays = delays * 1000;
} catch (InterruptedException ex) {
//do nothing
}
System.out.println("tag number" + tagNumber + "numbertags" + numberTags);
if (!sleep) {
if (tagNumber < numberTags) {
System.out.println("Loading tag:" + tagNumber);
loadTag(tagNumber);
}
}
}
}
}
Ce aime 20 photos, alors en charge un autre hashtag, et se répète.
L'aide de ce serait super, merci.
Vous devez vous connecter pour publier un commentaire.
Le gel est parce que vous essayez de tout faire sur le même fil, lorsque vous utilisez
Thread.sleep(delays)
, vous êtes en fait la mise de votre thread d'INTERFACE utilisateur pour dormir, et donc le décalage horaire !Essayez d'utiliser le fil pour votre travail, vous pouvez soit utiliser un thread de travail, si ce que vous faites ne sera pas affecter l'INTERFACE utilisateur
ou vous pouvez utiliser La plate-forme.runLater(), si vous souhaitez que les modifications affichées sur l'INTERFACE utilisateur !
Pour plus de détails :
la simultanéité dans javafx !
La plate-forme.runLater et de la Tâche en JavaFX