Jasper, JavaFX Salınım Düğümünde bileşenlerin düzgün oluşturulmadığını bildiriyor


13

JavaFX 11'de Jasper Raporu oluşturmak için dinamik raporlar kullanıyorum. Raporu Salıncak Düğümü içine yüklüyorum ancak Jasper raporu yalnızca yığın bölmesi alanına tıklayacaksam ve diğer tüm bileşenler yalnızca bu bileşenlerin üzerine geldiğimde görünür. Bileşenler ve rapor içerikleri, fareyle üzerine gelindiğinde görünmüyor ve Yığın Bölmesi üzerinde kaydırma yaparken rapor gösteriliyor.

Bu Java 8 hata oldu ve çözülmüş gibi görünüyor ama Java 11 de ben de aynı sorunu alıyorum.

Güncelleme

Ben herhangi bir yanıt alamadım ve kleopatra tarafından önerildiği gibi minimal tekrarlanabilir kod oluşturduk. Lütfen buna bakın.

JavaFxJasperReportsDemo.java

package demo;

import java.util.ArrayList;
import java.util.List;

import javax.swing.SwingUtilities;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.embed.swing.SwingNode;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import net.sf.dynamicreports.jasper.builder.JasperReportBuilder;
import net.sf.dynamicreports.report.builder.DynamicReports;
import net.sf.dynamicreports.report.builder.column.Columns;
import net.sf.dynamicreports.report.builder.component.Components;
import net.sf.dynamicreports.report.builder.datatype.DataTypes;
import net.sf.dynamicreports.report.constant.HorizontalTextAlignment;
import net.sf.dynamicreports.report.exception.DRException;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.swing.JRViewer;

public class JavaFxJasperReportsDemo extends Application{

    @FXML
    private StackPane stackPane;

    public void start(Stage stage) throws Exception{

        try{
            System.out.println("Hello");
            Parent root = FXMLLoader.load(getClass().getResource("/FXMLJavaFXJasperReportsDemo.fxml"));
            Scene scene = new Scene(root);
            stage.setScene(scene);
            stage.setTitle("Java FX Demo");
            stage.show();
            stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
                public void handle(WindowEvent arg0) {
                    Platform.exit();
                }
            });
        }
        catch (Exception e){
            throw e;
        }
    }


    @FXML
    public void loadReport(ActionEvent event) {
        JasperReportBuilder report = DynamicReports.report();
        List<DemoPOJO> lstDemoPOJOs=new ArrayList<DemoPOJO>();
        DemoPOJO demoPOJO=new DemoPOJO();
        demoPOJO.setName("ABC");
        demoPOJO.setCity("Delhi");
        lstDemoPOJOs.add(demoPOJO);
        demoPOJO = new DemoPOJO();
        demoPOJO.setName("XYZ");
        demoPOJO.setCity("Agra");
        lstDemoPOJOs.add(demoPOJO);
        report
        .columns(
                Columns.columnRowNumberColumn("S No"),
                Columns.column("Name", "name", DataTypes.stringType()),
                Columns.column("Address", "city", DataTypes.stringType())
                ).title(
                Components.text("Demo Java Fx Jasper Reports").
                setHorizontalTextAlignment(HorizontalTextAlignment.CENTER))
        .pageFooter(Components.pageXofY())
        .setDataSource(lstDemoPOJOs);

        try {
            JasperPrint jasperPrintReport=report.toJasperPrint();
            SwingNode swingNode = new SwingNode();
            AnchorPane.setTopAnchor(swingNode,0.0);
            AnchorPane.setBottomAnchor(swingNode,0.0);
            AnchorPane.setLeftAnchor(swingNode,0.0);
            AnchorPane.setRightAnchor(swingNode,0.0);
            JRViewer jrViewer=   new JRViewer(jasperPrintReport);
            SwingUtilities.invokeLater(() ->swingNode.setContent(jrViewer)
                    );
            stackPane.getChildren().add(swingNode);
        } catch (DRException e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args){
        System.out.println("Hello Main");
        try{
            launch(args);
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }
}

DemoPOJO.java

package demo;

public class DemoPOJO {

    String name;

    String city;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }
}

FXMLJavaFXJasperReportsDemo.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.StackPane?>

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="561.0" prefWidth="745.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="demo.JavaFxJasperReportsDemo">
   <children>
      <Label layoutX="345.0" layoutY="24.0" text="Java FX Demo Application" />
      <StackPane fx:id="stackPane" layoutX="14.0" layoutY="120.0" prefHeight="392.0" prefWidth="722.0" />
      <Button layoutX="62.0" layoutY="68.0" mnemonicParsing="false" onAction="#loadReport" text="Load Report" />
   </children>
</AnchorPane>

Kullandığım bağımlılıklar: -

<dependency>
    <groupId>net.sourceforge.dynamicreports</groupId>
    <artifactId>dynamicreports-core</artifactId>
    <version>6.1.0</version>
</dependency>

<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-controls</artifactId>
    <version>11</version>
</dependency>

<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-fxml</artifactId>
    <version>11</version>
</dependency>

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.2.11</version>
</dependency>

<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-swing</artifactId>
    <version>11-ea+24</version>
</dependency>

Çıktı

  1. Rapor yükle düğmesine tıkladıktan sonra yalnızca bir kayıt simgesi görünür, rapor görüntülenmez. Rapor yükle düğmesine tıkladıktan sonra yalnızca bir kayıt simgesi görünür

  2. Yığın Bölmesi Alanı'na tıkladıktan sonra şimdi Rapor görünür. Yığın Bölmesi Alanı'na tıkladıktan sonra şimdi rapor görünür

  3. Fareyle başka bir simgenin üzerine geldikten sonra şimdi Yazdır simgesi görünür. Fareyle başka bir simgenin üzerine geldikten sonra şimdi Yazdır simgesi görünüyor

  4. Fareyle diğer simgelerin üzerine geldikten sonra tek tek görünür hale geliyorlar. Diğer simgelerin üzerine geldikten sonra tek tek görünür hale geliyorlar


Sadece oy alıyorum ama kimse bana cevap vermiyor. Bu sorunun çözümü için çok umutsuzum.
Satish Pahuja

3
Bir sağlayarak bir cevap şansınızı artırabilirsiniz minimal tekrarlanabilir örneği (Zihin: değil tam kod ama :) sorununuzu gösteren amacıyla yazılmış bir küçük örnek
kleopatra

2
ve ilgili tüm etiketleri ekleyin .. belki salıncak / jasperreport kalabalığından biri bazı yararlı bilgiler vardır
Kleopatra

1
Merhaba, programı çalıştırıyorum jbsdk11b125_osx_x64ve sorunu yeniden oluşturamadım. Tüm içeriği doğrudan gösterir. Her ne kadar bir uyarı alıyorsam JavaFX API
11.0.1

2
1) Ayrıca grafik sürücüsü ile ilgili bir sorun olabilir. Docs.oracle.com/en/java/javase/11/troraseot/… sorunlarının giderilmesi için başlangıç ​​noktası olarak bazı özellikler . 2) Eğer daha yeni bir sürümünü denediniz org.openjfx:javafx-swing, mesela 11? 3) Java 11.0.5, Maven 3.6.2 ve eklentisini kullanarak, org.openjfx:javafx-maven-plugin:0.0.4sorun oluşturmadan çalışır (rapor, Load Reportdüğmeye tıklandıktan sonra gösterilir ). Uygulama ile başlar mvn clean javafx:run.
Düşük

Yanıtlar:


1

OpenJFX hata ayıklama bayrakları için OpenJDK wiki'yi kontrol ettikten sonra aşağıdakileri deneyebilirsiniz.

pom.xmlOpenJFX için bir JVM seçeneğinin derleme bölümüne ekleme

<plugin>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-maven-plugin</artifactId>
    <version>0.0.4</version>
    <configuration>
        <mainClass>demo.JavaFxJasperReportsDemo</mainClass>
        <options>
            <option>-Dprism.verbose=true</option>
        </options>
    </configuration>
</plugin>

mvn javafx:runonunla uygulamayı çalıştırmak tespit Prizma yapılandırmasını rapor edecek

sistemimdeki çıktı

Prism pipeline init order: es2 sw 
Using Double Precision Marlin Rasterizer
Using dirty region optimizations
Not using texture mask for primitives
Not forcing power of 2 sizes for textures
Using hardware CLAMP_TO_ZERO mode
Opting in for HiDPI pixel scaling
Prism pipeline name = com.sun.prism.es2.ES2Pipeline
Loading ES2 native library ... prism_es2
    succeeded.
GLFactory using com.sun.prism.es2.X11GLFactory
(X) Got class = class com.sun.prism.es2.ES2Pipeline
Initialized prism pipeline: com.sun.prism.es2.ES2Pipeline
...
Graphics Vendor: Intel Open Source Technology Center
       Renderer: Mesa DRI Intel(R) Ivybridge Mobile 
        Version: 3.0 Mesa 19.3.2

donanım hızlandırmalı bir oluşturucu kullanıyor Loading ES2 native library ... prism_es2

Yazılım oluşturucunun kullanımını zorlamak mümkündür. Değişiklikpom.xml

        <options>
            <option>-Dprism.verbose=true</option>
            <option>-Dprism.order=sw</option
        </options>

çıktı o zaman

Prism pipeline init order: sw 
Using Double Precision Marlin Rasterizer
Using dirty region optimizations
Not using texture mask for primitives
Not forcing power of 2 sizes for textures
Using hardware CLAMP_TO_ZERO mode
Opting in for HiDPI pixel scaling
*** Fallback to Prism SW pipeline
Prism pipeline name = com.sun.prism.sw.SWPipeline
(X) Got class = class com.sun.prism.sw.SWPipeline
Initialized prism pipeline: com.sun.prism.sw.SWPipeline
 vsync: true vpipe: false

Yazılım oluşturucuyu kullanıyor Fallback to Prism SW pipeline.

yukarıdaki testler için kullanılan versiyonlar:

JDK

java version "11.0.2" 2019-01-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.2+9-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+9-LTS, mixed mode)

Uzman

Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)

paylaşım için teşekkürler ama bu yaklaşım sorunu çözmedi.
Satish Pahuja

1
@SatishPahuja Hangi somut Java sürümünü java -versionkullanıyorsunuz? Eklenti 11yerine sürümü çalıştırmayı denediniz mi? 11-ea+24org.openjfx:javafx-swing
SubOptimal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.