JavaFX 8 + Spring Boot, API печати не показывает настройки страницы - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть простое приложение Spring Boot + JavaFX 8, например:

package com;

import javafx.application.Application;
import javafx.print.PrinterJob;
import javafx.stage.Stage;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class Main extends Application {

    protected ConfigurableApplicationContext springContext;

    public static void main(final String[] args) {
        Application.launch(args);
    }

    @Override
    public void init() {
        springContext = springBootApplicationContext();
    }

    @Override
    public void start(final Stage stage) {
        // Create the PrinterJob
        PrinterJob job = PrinterJob.createPrinterJob();

        if (job == null)
        {
            return;
        }

        // Show the page setup dialog
        boolean proceed = job.showPageSetupDialog(stage);

        if (proceed)
        {
            System.out.println("SUCCESS");
        }
    }

    @Override
    public void stop() {
        springContext.close();
    }


    private ConfigurableApplicationContext springBootApplicationContext() {
        SpringApplicationBuilder builder = new SpringApplicationBuilder(Main.class);
        String[] args = getParameters().getRaw().toArray(new String[0]);
        return builder.run(args);
    }
}

Проблема в том, что оно печатает SUCCESS, не показывая настройки страницы вообще, независимо от ОС (сейчас яработает на Linux).Пример из здесь (раздел 5. Отображение диалогов печати), однако, работает как задумано.Почему мое приложение Spring Boot не работает, в то время как второй пример работает?

1 Ответ

0 голосов
/ 27 сентября 2018

Оказалось, что Spring Boot по умолчанию устанавливает для свойства java.awt.headless значение true, что приводит к тому, что приложение запускается в автономном режиме и, следовательно, не отображает настройки печати.Я решил это, просто отладив код и затем выполнив два этих SO вопроса:

, поэтому мой окончательный код выглядит следующим образом:

package com;

import javafx.application.Application;
import javafx.print.PrinterJob;
import javafx.stage.Stage;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class Main extends Application {

    protected ConfigurableApplicationContext springContext;

    public static void main(final String[] args) {
        System.setProperty("java.awt.headless", "false");
        Application.launch(args);
    }

    @Override
    public void init() {
        springContext = springBootApplicationContext();
    }

    @Override
    public void start(final Stage stage) {
        // Create the PrinterJob
        PrinterJob job = PrinterJob.createPrinterJob();

        if (job == null)
        {
            return;
        }

        // Show the page setup dialog
        boolean proceed = job.showPageSetupDialog(stage);

        if (proceed)
        {
            System.out.println("SUCCESS");
        }
    }

    @Override
    public void stop() {
        springContext.close();
    }


    private ConfigurableApplicationContext springBootApplicationContext() {
        SpringApplicationBuilder builder = new SpringApplicationBuilder(Main.class);
        String[] args = getParameters().getRaw().toArray(new String[0]);
        return builder.run(args);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...