

JavaFxにて、PrinterJobを使って以下のコードを実行しましたが、エラー（？）のような表示が出てうまく印刷ができませんでした（Google
Chromeで開けませんでした）。  
原因や解決策を教えていただきたいです。

**実行したコード**

[code]

    AnchorPane node = new AnchorPane() ;
    VBox vb = new VBox();
    node.getChildren().add(vb);
    for(int i = 0;i < 100;i++) {
        vb.getChildren().add(new Button("button-"+i));
    }
    System.out.println("EXPORT:"+node);
    PrinterJob job = PrinterJob.createPrinterJob();
    boolean doPrint = job.showPrintDialog(FBEApp.window);
    if(doPrint) {
        System.out.println("印刷実行");
        job.printPage(node);
    }else {
        System.out.println("印刷キャンセル");
    }
    System.out.println("----");
    
[/code]

**コンソールに出た表示**

[code]

    EXPORT:AnchorPane@30b4f8a8
    印刷実行
    WARNING: An illegal reflective access operation has occurred
    WARNING: Illegal reflective access by com.sun.prism.j2d.J2DFontFactory (file:/ *※非表示※* javafx-sdk-11.0.2/lib/javafx.graphics.jar) to method sun.font.FontUtilities.getCompositeFontUIResource(java.awt.Font)
    WARNING: Please consider reporting this to the maintainers of com.sun.prism.j2d.J2DFontFactory
    WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
    WARNING: All illegal access operations will be denied in a future release
    
[/code]

**環境**  
JRE ... javaSE-11  
IDE ... eclipse  
javafx ... 11.0.2


CC BY-SA 4.0
2021-05-16T15:14:00.987
75877
2021-05-16T23:19:12.147
2021-05-16T16:34:12.437
3060
45225
question
java javafx 印刷
JavaFxでの印刷に失敗する


まずはエラー(ではなく警告ですが)の内容から。。

だいたい以下のような意味だと思います。

>
> com.sun.prism.j2d.J2DFontFactoryからsun.font.FontUtilities.getCompositeFontUIResourceへの不正なリフレクションが発生しました。可能であればcom.sun.prism.j2d.J2DFontFactoryの開発者へレポートして下さい。不正なリフレクションは将来的に全面的に動作しなくなりますが、現在は
> --illegal-access=warnとすることで「警告」として動作します。

この警告については、マイクロソフトのサイトに詳細が記載されていました。引用すると。

> コマンド ライン オプション --illegal-access=warn を設定することをお勧めします。 Java 11 では、リフレクションを使用して
> JDK 内部 API にアクセスすると、不正なリフレクト アクセス警告が発生します。 既定では、最初の不正なアクセスに対してのみ警告が発行されます。
> --illegal-access=warn を設定すると、不正な反射アクセス "ごとに" 警告が生成されます。 オプションが warn
> に設定された不正アクセスの場合、より多くのケースが見つかります。 ただし、重複する警告も多数表示されます。  
>  アプリケーションが Java 11 上で動作したら、Java ランタイムの今後の動作を模倣するように --illegal-access=deny
> を設定します。 Java 16 以降では、既定値は --illegal-access=deny です。

[参照サイト:https://docs.microsoft.com/ja-
jp/azure/developer/java/fundamentals/transition-from-java-8-to-
java-11](https://docs.microsoft.com/ja-
jp/azure/developer/java/fundamentals/transition-from-java-8-to-java-11)

なので、以下の条件で試してみることをお勧めします。

  1. 実行するJDKのバージョンを下げて実行する。


CC BY-SA 4.0
2021-05-16T21:39:15.663
75879
2021-05-16T23:19:12.147
2021-05-16T23:19:12.147
10174
10174
75877
answer