জাফারএফএস সুইং নোডে জ্যাস্পার রিপোর্টগুলি উপাদানগুলি যথাযথভাবে উপস্থাপন করছে না


13

জাভাএফএক্স ১১-তে জ্যাস্পার রিপোর্ট তৈরির জন্য আমি গতিশীল প্রতিবেদনগুলি ব্যবহার করছি। আমি সুইং নোডের অভ্যন্তরে প্রতিবেদনটি লোড করছি তবে জ্যাস্পার রিপোর্টটি কেবল তখনই উপস্থিত হয় যখন আমি স্ট্যাক ফলক অঞ্চল এবং অন্যান্য সমস্ত উপাদানগুলিতে ক্লিক করব তবেই যদি আমি all সমস্ত উপাদানগুলির উপর ঘুরে দেখি। উপাদান এবং প্রতিবেদন সামগ্রীগুলি মাউস ঘোরাতে প্রদর্শিত হওয়ার চেয়ে তাত্ক্ষণিকভাবে লোড হচ্ছে না এবং স্ট্যাক ফলকে স্ক্রোল করার সময় প্রতিবেদনটি প্রদর্শিত হচ্ছে।

যেহেতু এটি জাভা 8-তে বাগ ছিল এবং এটি সমাধান হয়ে গেছে বলে মনে হচ্ছে তবে জাভা 11 এও আমি একই সমস্যাটি পাচ্ছি।

হালনাগাদ

যেহেতু আমি কোনও সাড়া পাচ্ছি না এবং ক্লিওপেট্রার পরামর্শ অনুসারে আমি ন্যূনতম প্রজননযোগ্য কোড তৈরি করেছি। দয়া করে এটি দেখুন।

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>

নির্ভরতাগুলি আমি ব্যবহার করছি: -

<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>

আউটপুট

  1. লোড রিপোর্ট বোতামে ক্লিক করার পরে কেবল একটি সেভ আইকন দৃশ্যমান হয় কোনও প্রতিবেদন দৃশ্যমান হয় না। লোড রিপোর্ট বোতামে ক্লিক করার পরে কেবল একটি সেভ আইকন দৃশ্যমান হয় কোনও প্রতিবেদন দৃশ্যমান হয় না

  2. স্ট্যাক ফল এরিয়ায় ক্লিক করার পরে এখন প্রতিবেদনটি দৃশ্যমান। স্ট্যাক ফল এরিয়ায় ক্লিক করার পরে এখন প্রতিবেদনটি দৃশ্যমান

  3. অন্য আইকন ধরে নেওয়ার পরে এখন মুদ্রণ আইকন দৃশ্যমান হয়। অন্য আইকন ধরে নেওয়ার পরে এখন মুদ্রণ আইকন দৃশ্যমান হয়

  4. পাশাপাশি অন্যান্য আইকনগুলিতে ঘোরাফেরা করার পরে তারা একে একে দৃশ্যমান হচ্ছে। পাশাপাশি অন্যান্য আইকনগুলিতে ঘোরাফেরা করার পরে তারা একে একে দৃশ্যমান হচ্ছে


আমি কেবল উপভোগ করছি কিন্তু কেউই আমাকে উত্তর দিচ্ছে না। এই প্রশ্নের কোনও সমাধান পেতে আমি খুব মরিয়া।
সতীশ পহুজা

3
আপনি যদি একটি প্রদানের মাধ্যমে উত্তরের জন্য আপনার সম্ভাবনা উন্নত পারে ন্যূনতম গঠনকর উদাহরণ (মন: না আপনার সম্পূর্ণ কোড, কিন্তু একটি ছোট উদাহরণ আপনার সমস্যা প্রদর্শক :) একমাত্র উদ্দেশ্য জন্য লিখিত
kleopatra

2
এবং সমস্ত প্রাসঙ্গিক ট্যাগ যুক্ত করুন .. সম্ভবত দোল / জ্যাস্পেরপোর্টের ভিড়ের কারও কারও কাছে কিছু সহায়ক অন্তর্দৃষ্টি রয়েছে
ক্লিওপাত্রা

1
হাই, আমি প্রোগ্রামটি চালাচ্ছি jbsdk11b125_osx_x64এবং আমি সমস্যাটি পুনরুত্পাদন করতে পারিনি। এটি সরাসরি সম্পূর্ণ সামগ্রী দেখায়। যদিও আমি একটি সতর্কতা পেয়ে যাচ্ছি জাভাএফএক্স এপিআইএল 11.0.1 সংস্করণের জাভাএফএক্স এপিআই সহ 10.0.2-অভ্যন্তরীণ সংস্করণটি জাভাএফএক্স দ্বারা চালিত ...
Vall0n

2
1) এটি গ্রাফিক্স ড্রাইভার সম্পর্কিত সমস্যাও হতে পারে। ডকস.ওরাকল.ইন / জাভা / জাভাসে / ১১ / ট্রাবলশুট / … সমস্যা সমাধানের জন্য সূচনা পয়েন্ট হিসাবে কিছু সম্পত্তি । 2) আপনি কি নতুন সংস্করণের org.openjfx:javafx-swingউদাহরণ ব্যবহার করেছেন , যেমন 11? 3) জাভা 11.0.5, ম্যাভেন 3.6.2, এবং প্লাগইন org.openjfx:javafx-maven-plugin:0.0.4ব্যবহার করে এটি সমস্যাগুলি সরবরাহ না করে কাজ করে ( Load Reportবোতামে ক্লিক করার পরে রিপোর্টটি প্রদর্শিত হয় )। অ্যাপ্লিকেশন দিয়ে শুরু হয় mvn clean javafx:run
সাবঅપ્টিমাল

উত্তর:


1

ওপেনজেএফএক্স ডিবাগ পতাকাগুলির জন্য ওপেনজেডকে উইকি যাচাইয়ের পরে আপনি নিম্নলিখিতগুলি চেষ্টা করতে পারেন।

pom.xmlওপেনজেএফএক্সের জন্য একটি জেভিএম বিকল্পের বিল্ড বিভাগে যুক্ত করুন

<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:runএটি দিয়ে প্রজেক্টটি কার্যকর করা সনাক্ত করা প্রিজম কনফিগারেশনের প্রতিবেদন করবে

আমার সিস্টেমে আউটপুট

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

এটি একটি হার্ডওয়্যার ত্বক সরবরাহকারী ব্যবহার করছে Loading ES2 native library ... prism_es2

সফ্টওয়্যার রেন্ডারারের ব্যবহারকে জোর করা সম্ভব। পরিবর্তনpom.xml

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

আউটপুট তখন হয়

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

এটি সফ্টওয়্যার রেন্ডারার ব্যবহার করছে Fallback to Prism SW pipeline

উপরের পরীক্ষার জন্য ব্যবহৃত সংস্করণ:

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)

ম্যাভেন

Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)

ভাগ করে নেওয়ার জন্য ধন্যবাদ তবে এই পদ্ধতির সমস্যা সমাধান হয়নি।
সতীশ পহুজা

1
@ সতীশপাহুজা আপনি কোন কংক্রিট জাভা সংস্করণ java -versionব্যবহার করেন? আপনি কি প্লাগিনের 11পরিবর্তে রিলিজ চালানোর চেষ্টা করেছেন ? 11-ea+24org.openjfx:javafx-swing
সাবঅપ્টিমাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.