Мне нужно запустить приложение javafx из другого класса «контейнера» и вызвать функции в приложении, но, похоже, не существует способа получить ссылку на приложение, запущенное с использованием метод Application.launch(). Это возможно? Запуск приложения JavaFX из другого класса
ответ
У меня была такая же проблема, как это и есть вокруг него с помощью этого хака:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import java.util.concurrent.CountDownLatch;
public class StartUpTest extends Application {
public static final CountDownLatch latch = new CountDownLatch(1);
public static StartUpTest startUpTest = null;
public static StartUpTest waitForStartUpTest() {
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
return startUpTest;
}
public static void setStartUpTest(StartUpTest startUpTest0) {
startUpTest = startUpTest0;
latch.countDown();
}
public StartUpTest() {
setStartUpTest(this);
}
public void printSomething() {
System.out.println("You called a method on the application");
}
@Override
public void start(Stage stage) throws Exception {
BorderPane pane = new BorderPane();
Scene scene = new Scene(pane, 500, 500);
stage.setScene(scene);
Label label = new Label("Hello");
pane.setCenter(label);
stage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}
и затем класс вы запускаете приложение из:
public class StartUpStartUpTest {
public static void main(String[] args) {
new Thread() {
@Override
public void run() {
javafx.application.Application.launch(StartUpTest.class);
}
}.start();
StartUpTest startUpTest = StartUpTest.waitForStartUpTest();
startUpTest.printSomething();
}
}
Надежда, которая помогает вам.
Я не уверен, чего вы пытаетесь достичь, но обратите внимание, что вы можете, например, позвонить из другого класса Application.launch
, чтобы запустить поток приложений JavaFX и Platform.exit
, чтобы остановить его.
Спасибо, но Application.launch() является проблемой. Он создает мое приложение для меня, но не возвращает ссылку на него или не позволяет передать какой-либо объект конструктору приложения! Есть ли другой способ получить построенное приложение после запуска? – Oli
Как вы называете 'Application.launch()' из другого класса? Я получаю 'class [myclass] не подкласс javafx.application.Application' error – jdurston
@JohnADurston Метод перегружен. Используйте эту версию: https://docs.oracle.com/javase/8/javafx/api/javafx/application/Application.html#launch-java.lang.Class-java.lang.String...- – Puce
Пусть это наш JavaFX класс:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
public class OKButton extends Application {
@Override
public void start(Stage stage) {
Button btn = new Button("OK");
Scene scene = new Scene(btn, 200, 250);
stage.setTitle("OK");
stage.setScene(scene);
stage.show();
}
}
Тогда мы можем запустить его из другого класса, как это:
import javafx.application.Application;
public class Main {
public static void main(String[] args) {
Application.launch(OKButton.class, args);
}
}
не работал для меня. возвращает ошибку «Не удалось построить приложение» –
@RezwanAzfarHaleem. Задайте новый вопрос с информацией о вашей проблеме. Я смог запустить этот код без ошибок в Eclipse Neon и Java 8 на недавно установленной машине Windows 10. Единственным дополнительным шагом, который я должен был предпринять, было добавить новое программное обеспечение от Neon - http://download.eclipse.org/releases/neon и фильтр для fx и установить инструменты IDE общего назначения. – ThisClark
Жаль, что это сработало для меня сейчас. Моя проблема заключалась в том, что я поместил OKButton в тот же класс, что и Main. Есть ли какая-то особая причина, почему это происходит? –
Вышеуказанные способы вызова другого класса JavaFX от другого иногда работают. Пытаясь найти лучший способ сделать это привело меня к следующей прогулке вокруг:
Пусть это класс JavaFX, что exteds приложения мы хотим показать, из другого класса, то мы должны добавить следующие строки
class ClassToCall extends Application{
//Create a class field of type Shape preferably static...
static Stage classStage = new Stage();
@Override
public void start(Stage primaryStage){
// Assign the class's stage object to
// the method's local Stage object:
classStage = primaryStage ;
// Here comes some more code that creates a nice GUI.....
// ......
}
}
А теперь из другого места в проекте, для того, чтобы открыть окно , что выше класс создает сделать следующее:
// Suppose we want to do it with a button clicked:
btn1.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
//create an object of the class you wish to invoke its
//start() method:
ClassToCall ctc = new ClassToCall();
// Then call its start() method in the following way:
ctc.start(ClassToCall.classStage);
}// End handle(ActionEvent event)
});// End anonymous class
- 1. JavaFX Запуск приложения автономный или из другого приложения
- 2. Запуск Java-класса из другого приложения Java
- 3. Открытие другого приложения JavaFX из другого?
- 4. Запуск dll из приложения JavaFX
- 5. Запуск класса сервлета из другого класса
- 6. JavaFX show ImageView из другого класса класса
- 7. Запуск GUI из другого класса
- 8. Запуск события из другого класса
- 9. Запуск MediaPlayer из другого класса
- 10. Запуск кода из другого класса
- 11. Запуск приложения из другого процесса
- 12. Запуск методов класса из другого класса
- 13. Запуск приложения из другого приложения на Android
- 14. запуск настольного приложения из другого приложения Java
- 15. Запуск приложения Java из другого приложения Java
- 16. Запуск приложения Java из другого приложения
- 17. Запуск приложения facebook из другого приложения
- 18. Запуск функции одного приложения из другого приложения
- 19. Запуск приложения ClickOnce из другого приложения ClickOnce
- 20. Обновление TextFlow из другого класса JavaFx
- 21. Запуск приложения JavaFx из плагина eclipse
- 22. Запуск приложения javaFX из Java-кода
- 23. JavaFX Query - запуск из приложения Java
- 24. Запуск другого приложения из Android Application и «Запуск приложения»
- 25. javafx закрыть окно из другого класса
- 26. Как вызвать класс JavaFX из другого класса?
- 27. вызов нестационарного метода из другого класса - JavaFX
- 28. JavaFX запускающее приложение из другого класса
- 29. JavaFX - Открыть сцену из другого события класса
- 30. Запуск приложения от другого
Спасибо, что работает хорошо. Я также нашел другой способ сделать это. Если вы запускаете одно приложение, вы можете загружать в него этапы из любого места в базе кода, пока вы добавляете сцену в поток приложений. Вы можете использовать Platform.runLater() для этого. – Oli
@ Oli, можете ли вы опубликовать пример этого другого способа сделать это? В настоящее время у меня такая же проблема. –