【问题标题】:JavaFX 8 + Spring Boot, Print API not showing the Page SetupJavaFX 8 + Spring Boot,打印 API 不显示页面设置
【发布时间】:2018-09-26 19:22:07
【问题描述】:

我有一个简单的 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)。但是,here 的示例(第 5 节。显示打印对话框)按预期工作。为什么我的 Spring Boot 应用程序无法运行,而第二个示例运行?

【问题讨论】:

    标签: java spring-boot javafx printing


    【解决方案1】:

    事实证明,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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-03-21
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多