java - error - jlabel netbeans
Cómo llamar a launch() más de una vez en java (2)
prueba esto, probé esto y encontré con éxito
@Override
public void start() {
super.start();
try {
// Because we need to init the JavaFX toolkit - which usually Application.launch does
// I''m not sure if this way of launching has any effect on anything
new JFXPanel();
Platform.runLater(new Runnable() {
@Override
public void run() {
// Your class that extends Application
new ArtisanArmourerInterface().start(new Stage());
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
Cómo llamar al lanzamiento () más de una vez en java me da una excepción como "ERROR IN MAIN: java.lang.IllegalStateException: el inicio de la aplicación no se debe llamar más de una vez"
He creado cleint de reposo en mi aplicación java cuando llega la solicitud, se llama javafx y se abre la vista web después de completar la operación webview y cierro las ventanas javafx usando el método Platform.exit (). cuando llega la segunda solicitud recibo este error sobre cómo solucionar este error.
Código de aplicación JavaFx:
public class AppWebview extends Application {
public static Stage stage;
@Override
public void start(Stage _stage) throws Exception {
stage = _stage;
StackPane root = new StackPane();
WebView view = new WebView();
WebEngine engine = view.getEngine();
engine.load(PaymentServerRestAPI.BROWSER_URL);
root.getChildren().add(view);
engine.setJavaScriptEnabled(true);
Scene scene = new Scene(root, 800, 600);
stage.setScene(scene);
engine.setOnResized(new EventHandler<WebEvent<Rectangle2D>>() {
public void handle(WebEvent<Rectangle2D> ev) {
Rectangle2D r = ev.getData();
stage.setWidth(r.getWidth());
stage.setHeight(r.getHeight());
}
});
JSObject window = (JSObject) engine.executeScript("window");
window.setMember("app", new BrowserApp());
stage.show();
}
public static void main(String[] args) {
launch(args);
}
Método RestClient: Llamada a la aplicación JavaFX
// method 1 to lanch javafx
javafx.application.Application.launch(AppWebview.class);
// method 2 to lanch javafx
String[] arguments = new String[] {"123"};
AppWebview .main(arguments);
No puede llamar a launch()
en una aplicación JavaFX más de una vez, no está permitido.
Desde el javadoc:
It must not be called more than once or an exception will be thrown.
Sugerencia para mostrar una ventana periódicamente
- Simplemente llame a
Application.launch()
una vez. - Mantenga el tiempo de ejecución de JavaFX ejecutándose en segundo plano utilizando
Platform.setImplicitExit(false)
, para que JavaFX no se cierre automáticamente cuando oculta la última ventana de la aplicación. - La próxima vez que necesite otra ventana, ajuste la llamada de
show()
la ventana enPlatform.runLater()
, para que la llamada se ejecute en el subproceso de la aplicación JavaFX.
Si está mezclando Swing puede usar un JFXPanel en lugar de una Aplicación , pero el patrón de uso será similar al descrito anteriormente.
Muestra Wumpus
import javafx.animation.PauseTransition;
import javafx.application.*;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.stage.Stage;
import javafx.util.Duration;
import java.util.*;
// hunt the Wumpus....
public class Wumpus extends Application {
private static final Insets SAFETY_ZONE = new Insets(10);
private Label cowerInFear = new Label();
private Stage mainStage;
@Override
public void start(final Stage stage) {
// wumpus rulez
mainStage = stage;
mainStage.setAlwaysOnTop(true);
// the wumpus doesn''t leave when the last stage is hidden.
Platform.setImplicitExit(false);
// the savage Wumpus will attack
// in the background when we least expect
// (at regular intervals ;-).
Timer timer = new Timer();
timer.schedule(new WumpusAttack(), 0, 5_000);
// every time we cower in fear
// from the last savage attack
// the wumpus will hide two seconds later.
cowerInFear.setPadding(SAFETY_ZONE);
cowerInFear.textProperty().addListener((observable, oldValue, newValue) -> {
PauseTransition pause = new PauseTransition(
Duration.seconds(2)
);
pause.setOnFinished(event -> stage.hide());
pause.play();
});
// when we just can''t take it anymore,
// a simple click will quiet the Wumpus,
// but you have to be quick...
cowerInFear.setOnMouseClicked(event -> {
timer.cancel();
Platform.exit();
});
stage.setScene(new Scene(cowerInFear));
}
// it''s so scary...
public class WumpusAttack extends TimerTask {
private String[] attacks = {
"hugs you",
"reads you a bedtime story",
"sings you a lullaby",
"puts you to sleep"
};
// the restaurant at the end of the universe.
private Random random = new Random(42);
@Override
public void run() {
// use runlater when we mess with the scene graph,
// so we don''t cross the streams, as that would be bad.
Platform.runLater(() -> {
cowerInFear.setText("The Wumpus " + nextAttack() + "!");
mainStage.sizeToScene();
mainStage.show();
});
}
private String nextAttack() {
return attacks[random.nextInt(attacks.length)];
}
}
public static void main(String[] args) {
launch(args);
}
}