Giter Club home page Giter Club logo

Comments (6)

tanyaofei avatar tanyaofei commented on May 27, 2024 1

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

from springboot-javafx-support.

darhao avatar darhao commented on May 27, 2024 1

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);
        });
    }

from springboot-javafx-support.

tanyaofei avatar tanyaofei commented on May 27, 2024

I have the same problem. I am using JDK11 and SpringBoot 2.7

from springboot-javafx-support.

tanyaofei avatar tanyaofei commented on May 27, 2024

#96 This branch is about to fix this problem.

from springboot-javafx-support.

banmao999 avatar banmao999 commented on May 27, 2024

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

from springboot-javafx-support.

sangjiexun avatar sangjiexun commented on May 27, 2024

from springboot-javafx-support.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.