【问题标题】:How to resolve java.lang.NumberFormatException: For input string如何解决 java.lang.NumberFormatException:对于输入字符串
【发布时间】:2016-12-15 21:14:14
【问题描述】:

所以我在这个项目上工作了一段时间,最近遇到了这个问题。

应用程序每次编译都很好,但是当应用程序要启动时,当我按下详细信息按钮时,它会给我这个:

java.lang.NumberFormatException: For input string: "\ProyectoOUMA\ouma.administracfdi.Reader\dist"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:580)
    at java.lang.Integer.parseInt(Integer.java:615)
    at com.sun.deploy.security.DeployManifestChecker.verifyCodebaseEx(Unknown Source)
    at com.sun.deploy.security.DeployManifestChecker.verifyCodebase(Unknown Source)
    at com.sun.deploy.security.DeployManifestChecker.verify(Unknown Source)
    at com.sun.deploy.security.DeployManifestChecker.verify(Unknown Source)
    at com.sun.javaws.security.AppPolicy.grantUnrestrictedAccess(Unknown Source)
    at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResourcesHelper(Unknown Source)
    at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResources(Unknown Source)
    at com.sun.javaws.Launcher.prepareResources(Unknown Source)
    at com.sun.javaws.Launcher.prepareAllResources(Unknown Source)
    at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
    at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
    at com.sun.javaws.Launcher.launch(Unknown Source)
    at com.sun.javaws.Main.launchApp(Unknown Source)
    at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
    at com.sun.javaws.Main.access$000(Unknown Source)
    at com.sun.javaws.Main$1.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:745)

这是我正在使用的代码:

   `package ouma.administracfdi.reader;

    import java.io.File;
    import java.io.IOException;
    import java.nio.file.Files;
    import java.util.ArrayList;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import jxl.read.biff.BiffException;
    import jxl.write.WriteException;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
    import org.xml.sax.SAXParseException;

   public class OumaAdministracfdiReader {

public static ArrayList<DatosCfdi> arraydatoscfdi = new ArrayList<>();

DatosCfdi leerXml(File file, String ruta) throws ParserConfigurationException, SAXException, IOException{
    DatosCfdi cfdi = new DatosCfdi();
    NodeList list;
    Node node;
    Element element;
    String naturaleza = null;

    try {
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        list = (NodeList)  documentBuilder.parse(file).getElementsByTagName("cfdi:Comprobante"); //VALIDADA
        NodeList sublista, subsublista;
        Node subnodo, subsubnodo;

        for (int i = 0; i < list.getLength(); i++){
            node = list.item(i);
            try {
                 cfdi.setSubt(Double.parseDouble(node.getAttributes().getNamedItem("subTotal").getNodeValue()));
                 cfdi.setTotal(Double.parseDouble(node.getAttributes().getNamedItem("total").getNodeValue()));
                 cfdi.setTipo(node.getAttributes().getNamedItem("tipoDeComprobante").getNodeValue());
                 cfdi.setMotdes(node.getAttributes().getNamedItem("motivoDescuento").getNodeValue());      
            } catch (NullPointerException | NumberFormatException numex) { }//CATCH
                 cfdi.setFecha(node.getAttributes().getNamedItem("fecha").getNodeValue());
                cfdi.setRuta(ruta);

            sublista = node.getChildNodes();
                for (int a = 0; a < sublista.getLength(); a++){
                    subnodo = sublista.item(a);
                    try {
                    switch(subnodo.getNodeName()){
                        case "cfdi:Emisor": cfdi.setRfce(subnodo.getAttributes().getNamedItem("rfc").getNodeValue());
                            cfdi.setNome(subnodo.getAttributes().getNamedItem("nombre").getNodeValue()); break;
                        case "cfdi:Receptor": cfdi.setRfcr(subnodo.getAttributes().getNamedItem("rfc").getNodeValue());
                            cfdi.setNomr(subnodo.getAttributes().getNamedItem("nombre").getNodeValue()); break;
                        case "cfdi:Impuestos": 
                            try {
                            cfdi.setImpTra(Double.parseDouble(subnodo.getAttributes().getNamedItem("totalImpuestosTrasladados").getNodeValue()));
                            cfdi.setImpRet(Double.parseDouble(subnodo.getAttributes().getNamedItem("totalImpuestosRetenidos").getNodeValue()));
                        } catch (NullPointerException nullex) {}
                            subsublista = subnodo.getChildNodes();
                            //System.out.println("Tamaño sublista: " + subsublista.getLength());
                            for (int e = 0; e < subsublista.getLength(); e++){
                               // System.out.println("Valor de e: " + e);
                                subsubnodo = subsublista.item(e);
                                //System.out.println("NOMBRE DEL SUB SUB NODO: " + subsubnodo.getNodeName());
                                    if (subsubnodo.getNodeName().equalsIgnoreCase("cfdi:Retenciones")){
                                        NodeList ssubsubnodo;
                                        ssubsubnodo = subsubnodo.getChildNodes();                   
                                        for (int u = 0; u < ssubsubnodo.getLength(); u++){
                                            //System.out.println("Valor de U: " + u);
                                            if (ssubsubnodo.item(u).getNodeName().equalsIgnoreCase("cfdi:Retencion")){
                                                //System.out.println("NOMBRE DEL SSSUBNODO: " + ssubsubnodo.item(u).getNodeName());
                                                //System.out.println(ssubsubnodo.item(u).getAttributes().getNamedItem("impuesto").getNodeValue() + " " + ssubsubnodo.item(u).getAttributes().getNamedItem("importe").getNodeValue());
                                                           if (ssubsubnodo.item(u).getAttributes().getNamedItem("impuesto").getNodeValue().equalsIgnoreCase("ISR")) {
                                                                cfdi.setImpRetIsr(Double.parseDouble(ssubsubnodo.item(u).getAttributes().getNamedItem("importe").getNodeValue()));}
                                                            if (ssubsubnodo.item(u).getAttributes().getNamedItem("impuesto").getNodeValue().equalsIgnoreCase("IVA")) {
                                                                cfdi.setImpRetIva(Double.parseDouble(ssubsubnodo.item(u).getAttributes().getNamedItem("importe").getNodeValue()));}
                                            }
                                        }//FOR
                                        }//IF
                            } break;
                        case "cfdi:Complemento": subsublista = subnodo.getChildNodes();
                            for (int e=0; e < subsublista.getLength(); e++){
                                subsubnodo = subsublista.item(e);
                                    if (subsubnodo.getNodeName().matches("tfd:TimbreFiscalDigital")){
                                        cfdi.setUuid(subsubnodo.getAttributes().getNamedItem("UUID").getNodeValue());}
                            } break;
                        default : break;
                }} catch(NullPointerException nullex) {}
                }             
         }//FOR 
    } catch (SAXParseException saxe) {cfdi.setRuta(saxe.getMessage() + " " + ruta);}
return cfdi;}

public void recorrerCarpetas(String ruta, CfdiReader f) throws ParserConfigurationException, SAXException, IOException {
    DatosCfdi cfdi = new DatosCfdi();
    File folder = new File(ruta);
    File[] xmlFiles = folder.listFiles();
    String filetype;
    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
    //NodeList list, listemisor, listreceptor, listtfd;
  for (int a = 0; a < xmlFiles.length; a++) {
      filetype = Files.probeContentType(xmlFiles[a].toPath()); 
        if (xmlFiles[a].isFile()  && filetype.contains("xml") && !(xmlFiles[a].getName().equals(".xml"))){
            //System.out.println(xmlFiles[a].getPath() + " " + xmlFiles[a].getName());
            System.out.println(xmlFiles[a].getPath());
              f.archivosenprocesoText.setText(Integer.toString(a));
              f.salidaTextArea.setText(xmlFiles[a].getPath());
              cfdi = this.leerXml(xmlFiles[a], ruta + "\\" + xmlFiles[a].getName());
                arraydatoscfdi.add(cfdi);
                }//IS FILE?
        else { if (xmlFiles[a].isDirectory()) {
                    this.recorrerCarpetas(ruta + "\\"+xmlFiles[a].getName(), f);}}

    }
  }

public static void main(String[] args) throws ParserConfigurationException, IOException, SAXException, BiffException, WriteException, Exception {
    OumaAdministracfdiReader a = new OumaAdministracfdiReader();
    //a.ejecuta(args);
}

public void ejecuta(String[] args, CfdiReader f) throws Exception {
    OumaAdministracfdiReader lee = new OumaAdministracfdiReader();
    GuardarDatosExcelApache aexcel = new GuardarDatosExcelApache();
    String carpetaactual, carpetaguardar, nombrearchivo;
        carpetaactual = f.directorioTextField.getText();
        carpetaguardar = f.directorioguardarText.getText();
        nombrearchivo = f.nombrearchivoText.getText();   
        lee.recorrerCarpetas(carpetaactual, f);
        f.archivosenprocesoText.setText(String.valueOf(arraydatoscfdi.size()));
        //System.out.println(arraydatoscfdi.size());
       aexcel.guardarEnExcel(arraydatoscfdi, nombrearchivo, carpetaguardar);
    }

public static final String NEWLINE = "\n";

}`

这里是 jnlp:

`<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <jnlp codebase="file:/C:/ProyectoOUMA/ouma.administracfdi.Reader/dist/"               href="launch.jnlp" spec="1.0+">
<information>
    <title>ouma.administracfdi.Reader</title>
    <vendor>USUARIO</vendor>
    <homepage href=""/>
    <description>ouma.administracfdi.Reader</description>
    <description kind="short">ouma.administracfdi.Reader</description>
<offline-allowed/>
</information>
<update check="background"/>
<security>
<all-permissions/>
</security>
<resources>
    <j2se java-vm-args="-Xms2048m" version="1.8+"/>
    <jar href="ouma.administracfdi.Reader.jar" main="true"/>
 <jar href="lib/poi-ooxml-3.13-20150929.jar"/>
 <jar href="lib/poi-3.13-20150929.jar"/>
 <jar href="lib/xmlbeans-2.6.0.jar"/>
 <jar href="lib/poi-examples-3.13-20150929.jar"/>
 <jar href="lib/poi-excelant-3.13-20150929.jar"/>
 <jar href="lib/poi-ooxml-schemas-3.13-20150929.jar"/>
 <jar href="lib/jxl.jar"/>
 <extension href="jnlpcomponent1.jnlp"/>
 </resources>
<application-desc main-class="ouma.administracfdi.reader.CfdiReader">
</application-desc>
</jnlp>`

我在 NetBeans 工作。

感谢您的回答!

【问题讨论】:

  • 代码和输入在哪里?
  • 如果不发布minimal reproducible example,您可能不会获得很多帮助(请参阅How to Ask)。话虽如此,您正在将一个字符串传递给您正在使用的任何数字解析方法,该方法不是数字,并且在您执行此操作时不处理异常。
  • 它正在尝试将此"\ProyectoOUMA\ouma.administracfdi.Reader\dist" 字符串转换为数字。由于它不是数字,Java 会抛出该异常。
  • catch (NullPointerException nullex) {nullex.printStackTrace() } 替换catch (NullPointerException nullex) {} 之类的空catch 子句以获得有关捕获异常的一些有用信息。
  • 问题很可能是 jnlp 和/或应用程序签名 - 请参阅一些建议 herehere

标签: java netbeans java-web-start


【解决方案1】:

由于您没有任何代码,我不能肯定地说,但我认为问题是您在某处传递了字符串而不是文件。例如,您可能有:

("\ProyectoOUMA\ouma.administracfdi.Reader\dist");

什么时候应该有:

(new File("\ProyectoOUMA\ouma.administracfdi.Reader\dist"));

如果这没有帮助,如果我能看到您的代码,我很乐意再看看。

【讨论】:

  • 对于否决这个答案的人,我可以解释一下为什么它被否决了吗?你显然没有费心留下任何建设性的东西......
  • 不是downvoter,但尚不清楚传递字符串而不是文件将如何导致NumberFormatException(或发布的堆栈跟踪,暗示这是javaws jnlp文件的问题)
  • 我不是反对者,但我猜他们的原因类似于“发布答案,而不是猜测”。
  • 我想这很公平。
  • 通过查看堆栈跟踪,可以注意到错误发生在 com.sun.deploy.security.DeployManifestChecker.verifyCodebaseEx 内部,它负责检查 jar 的签名。
猜你喜欢
  • 1970-01-01
  • 2012-12-05
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
  • 2017-09-18
相关资源
最近更新 更多