springboot-javafx-support
springboot-javafx-support copied to clipboard
<Error: No auto configuration classes found in META-INF/spring.factories>
Hello dear developer There's a question here, it's about startup. (1) Works fine when I start in the IDE.
*(2) When I start via JAR, it reports an error like below.
Please let me know how to solve this problem.
By the way ,I am using JDK17, SpringBoot 2.7
Thanks!
I have the same problem. I am using JDK11 and SpringBoot 2.7
I found out that the exception cause by CompletableFuture.supplyAsync(() -> SpringApplication.run(this.getClass(), savedArgs) )...
at AbstractJavaFxApplicationSupport#init()
after I give a specify Executor, problem solved
/*
* (non-Javadoc)
*
* @see javafx.application.Application#init()
*/
@Override
public void init() throws Exception {
// Load in JavaFx Thread and reused by Completable Future, but should not be a big deal.
CompletableFuture.supplyAsync(() ->
SpringApplication.run(this.getClass(), savedArgs), Executors.newFixedThreadPool(2)
).whenComplete((ctx, throwable) -> {
if (throwable != null) {
LOGGER.error("Failed to load spring application context: ", throwable);
Platform.runLater(() -> showErrorAlert(throwable));
} else {
Platform.runLater(() -> {
loadIcons(ctx);
launchApplicationView(ctx);
});
}
}).thenAcceptBothAsync(splashIsShowing, (ctx, closeSplash) -> {
Platform.runLater(closeSplash);
});
}
You can copy the AbstractJavaFxApplicationSupport.java
file to src/main/java/de.felixroske.jfxsupport
and rewrite the method, it will solved your problem;
@sangjiexun
#96 This branch is about to fix this problem.
I encountered a similar problem. I modified the source code, changed the thread context class loader to SpringBoot's class loader, and then solved the problem
@Override
public void init() throws Exception {
// Load in JavaFx Thread and reused by Completable Future, but should no be a big deal.
defaultIcons.addAll(loadDefaultIcons());
CompletableFuture.supplyAsync(() -> {
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); //fix
return SpringApplication.run(this.getClass(), savedArgs);
}
).whenComplete((ctx, throwable) -> {
if (throwable != null) {
LOGGER.error("Failed to load spring application context: ", throwable);
Platform.runLater(() -> showErrorAlert(throwable));
} else {
Platform.runLater(() -> {
loadIcons(ctx);
launchApplicationView(ctx);
});
}
}).thenAcceptBothAsync(splashIsShowing, (ctx, closeSplash) -> {
Platform.runLater(closeSplash);
});
}
I encountered a similar problem. I modified the source code, changed the thread context class loader to SpringBoot's class loader, and then solved the problem
@Override public void init() throws Exception { // Load in JavaFx Thread and reused by Completable Future, but should no be a big deal. defaultIcons.addAll(loadDefaultIcons()); CompletableFuture.supplyAsync(() -> { Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); //fix return SpringApplication.run(this.getClass(), savedArgs); } ).whenComplete((ctx, throwable) -> { if (throwable != null) { LOGGER.error("Failed to load spring application context: ", throwable); Platform.runLater(() -> showErrorAlert(throwable)); } else { Platform.runLater(() -> { loadIcons(ctx); launchApplicationView(ctx); }); } }).thenAcceptBothAsync(splashIsShowing, (ctx, closeSplash) -> { Platform.runLater(closeSplash); }); }
It works!! Thank u so much!!!! I use the springboot-javafx-support code in SpringBoot3 with JavaFX17, and it work in IDEA, but fail to run in Jar and finally works after use your modified code it has took me two days to fingure out...tired
感谢您的来信,我会马上回复您