<Error: No auto configuration classes found in META-INF/spring.factories>
Closed this issue · 6 comments
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;
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