0
Exception in thread "main" java.lang.NumberFormatException: For input string: "    " 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:430)
at java.lang.Long.valueOf(Long.java:540)
at PckUtiles.lexec.leer(lexec.java:62)
at PckUtiles.lexec.verificar(lexec.java:34)
at PckjForms.Main.main(Main.java:40)

*プロジェクトを実行すると次のエラーが発生する "スレッド "main" で例外 java.lang.NumberFormatException: For input string: " 私のクラスの機能は、アプリケーションの再実行を回避することです。障害を特定するのに役立ちます。どうもありがとうございます *

ここに私のクラスlexecがあります

public class lexec {
    private String ruta = System.getProperties().getProperty("user.dir");
    private File archivo = new File(ruta + "\\Sifme.tmp");
    private int contador = 20;

    public lexec(){};

    public boolean verificar(){
        if(archivo.exists()){
            long time = leer();
            long res = rTiempo(time);
            if(res<contador){
                JOptionPane.showMessageDialog(null, "La aplicación esta en ejecución");
                System.exit(0);
                return false;
            }else{
                tarea_();
                return true;
            }
        }else{
            sifme();
            tarea_();
            return true;
        }
    }

    public long leer(){
        String line = "0";
        BufferedReader br;
        try{
            br = new BufferedReader(new FileReader(archivo));
            while(br.ready()){
                line = br.readLine();
            }
        }catch(IOException e){
            System.err.println(e.getMessage());
        }
        return Long.valueOf(line).longValue();
    }
    public void tarea_(){
        ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
        ses.scheduleAtFixedRate(
                new Runnable(){
                    @Override
                    public void run(){
                        sifme();
                    }
                },1000,contador*1000,TimeUnit.MILLISECONDS);
    }

    public void sifme(){
        Date fecha = new Date();
        try{
            BufferedWriter bw = new BufferedWriter(new FileWriter(archivo));
            bw.write(String.valueOf(fecha.getTime()));
            bw.close();
        }catch(IOException e){
            System.out.println(e.getMessage());
        }
    }
    public long rTiempo(long tiempoN){
        Date fecha = new Date();
        long t1 = fecha.getTime();
        long tiempo = t1 - tiempoN;
        tiempo = tiempo/1000;
        return tiempo;
    }
    public void detruir_(){
        if(archivo.exists()){
            archivo.delete();
            System.exit(0);
        }
    }
}
4

2 に答える 2

4

どの行でエラーが発生したかは教えてくれませんでしたが (知っているはずですが)、次の行であると推測できます。

    return Long.valueOf(line).longValue();

問題はline、数値文字列ではなく、空白の文字列です。空白を . に変換することは期待できませんLong。そのため、このエラーが発生します。

于 2013-11-06T00:30:12.427 に答える
0

例外は自明であり、" "として解析できないと思っていたでしょうLong

return line == null ? 0 : line.trim().isEmpty() ? 0 : Long.valueOf(line).longValue();最初に値の有効性を判断し、Stringそうでない場合はデフォルト値を返すようなものを使用してみてください。

null Stringaまたは emptyを区別することを気にしない場合は、読みやすい方をString使用することもできますreturn line == null || line.trim().isEmpty() ? 0 : Long.valueOf(line).longValue();

または、必要に応じて、値が例外を満たさない場合に何らかの例外をスローします

于 2013-11-06T00:33:28.473 に答える