net.sf.jasperreports.engine.jrexception:java.net.malformedurexception:无法调用“string.length()”,因为“spec”为null

shyt4zoc  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(423)

我在eclipse ide中使用javafx和jasperreport,我正在将我的项目从jdk8迁移到(jdk15+gradle 6),当执行jasperreport方法时,我得到以下错误:
net.sf.jasperreports.engine.jrexception:java.net.malformedurexception:无法调用“string.length()”,因为“spec”为null
gradle.build文件:

/*
 * This file was generated by the Gradle 'init' task.
 *
 * This generated file contains a sample Java project to get you started.
 * For more details take a look at the Java Quickstart chapter in the Gradle
 * User Manual available at https://docs.gradle.org/6.3/userguide/tutorial_java_projects.html
 */

plugins {
    // Apply the java plugin to add support for Java
    id 'java'
    id 'application'
    id 'org.openjfx.javafxplugin' version '0.0.8'
}

group 'com.numidia_technology'
version '1.0-SNAPSHOT'

repositories {
    // Use jcenter for resolving dependencies.
    // You can declare any Maven/Ivy/file repository here.
    mavenCentral()
    jcenter()
    maven{url "http://jasperreports.sourceforge.net/maven2/"}
    maven{url "http://jaspersoft.artifactoryonline.com/jaspersoft/third-party-ce-artifacts/"}
}
configurations {
    jasperreports {
        transitive = true
    }
}

dependencies {
    testImplementation 'junit:junit:4.12'
    testCompile group: 'org.apache.derby', name: 'derby', version: '10.15.2.0'
    compile group: 'org.apache.derby', name: 'derbyclient', version: '10.15.2.0'
    compile group: 'org.apache.derby', name: 'derbytools', version: '10.15.2.0'
    compile group: 'org.apache.derby', name: 'derbynet', version: '10.15.2.0'
    compile group: 'net.sf.jasperreports', name: 'jasperreports', version: '6.16.0'
    compile group: 'net.sf.jasperreports', name: 'jasperreports-fonts', version: '6.16.0'
    compile group: 'net.sf.jasperreports', name: 'jasperreports-functions', version: '6.16.0'
    compile group: 'net.sf.jasperreports', name: 'jasperreports-metadata', version: '6.16.0'
    compile group: 'net.sf.jasperreports', name: 'jasperreports-chart-customizers', version: '6.16.0'
    //compile group: 'net.sf.jasperreports', name: 'jasperreports-javaflow', version: '6.16.0'
    compile group: 'net.sf.jasperreports', name: 'jasperreports-custom-visualization', version: '6.16.0'
    //compile group: 'net.sf.jasperreports', name: 'jasperreports--chart-themes', version: '6.16.0'
    compile group: 'org.controlsfx', name: 'controlsfx', version: '11.0.3'
    compile group: 'commons-io', name: 'commons-io', version: '2.8.0'
    compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '3.0.7', ext: 'pom'

}

javafx {
    modules = [ 'javafx.base','javafx.controls', 'javafx.fxml', 'javafx.swing', 'javafx.media', 'javafx.graphics']
    version = '15.0.1'
}

mainClassName = 'com.numidia_technology.BusinessManagement'

run {
    jvmArgs += ['--add-exports', 'javafx.base/com.sun.javafx.event=ALL-UNNAMED']
    }

jar {
  manifest { 
    attributes "Main-Class": "$mainClassName"
  }  
doFirst {
  from {
    configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
    }
  exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
}

jasperreport方法:

String reportSource = "demo.jrxml";
                InputStream is = getClass().getResourceAsStream(reportSource);

                String reportSourceSub = "demo_address.jrxml";
                InputStream sub = getClass().getResourceAsStream(reportSourceSub);

                JasperReport jasperReport = (JasperReport) JRLoader.loadObjectFromFile("demo.jasper");
                JasperReport jasperReportSub = (JasperReport) JRLoader.loadObjectFromFile("demo_address.jasper");
                JasperPrint jasperPrint = null;

                jasperReportSub = JasperCompileManager.compileReport(sub);
                jasperReport = JasperCompileManager.compileReport(is);

                Map<String, Object> parameters = new HashMap<String, Object>();
                parameters.put("SUBREPORT_DIR", "");
                jasperPrint = JasperFillManager.fillReport(jasperReport, parameters,
                        new JRBeanCollectionDataSource(com.numidia_technology.ContactFactory.create()));
                JasperViewer.viewReport(jasperPrint, false);

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题