Не удается преобразовать строку в длинную

Всякий раз, когда функция getAsString вызывается из timeConverter, я получаю исключение числового формата в строке long timeMillis=Long.parseLong(time);. Я хочу преобразовать данную строку в длинную.

1) Вот мой класс timeConverter

package com.converter;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;

public class TimeConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
        return arg2;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component,
            Object value) {
        System.out.println("inside getAsString");
        String time=value.toString();

        long timeMillis=Long.parseLong(time);
        long currentTime=System.currentTimeMillis();
        long eclapseTime=timeMillis-currentTime;
        long secs=eclapseTime/1000;
        long days=secs/(60*60*24);
        long hours=(secs%(60*60*24))/60*60;
        long mins=(secs%(60*60*24)%(60*60))/60;
        long secs2=(secs%(60*60*24)%(60*60)%(60));
        StringBuffer sb = new StringBuffer();
        sb.append(days).append("days").append(hours).append("hours").append(mins).append("mins").append(secs2).append("secs");
        String object = sb.toString();
        return object;

    }

}

2) Вот stackstrace, который я получаю.

WARNING: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NumberFormatException: For input string: "1348756490255"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:495)
    at java.lang.Integer.parseInt(Integer.java:527)
    at com.converter.TimeConverter.getAsString(TimeConverter.java:37)
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getFormattedValue(HtmlBasicRenderer.java:519)
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getFormattedValue(HtmlBasicRenderer.java:538)
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:357)
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764)
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1757)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402)
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    at java.lang.Thread.run(Thread.java:722)

person Wizard Sultan    schedule 27.09.2012    source источник
comment
Откуда твой value?? Где вы вызываете свой метод?   -  person Rohit Jain    schedule 28.09.2012
comment
значение исходит из ‹h:outputText value=#{p.timeMillis}/› на странице xhtml.   -  person Wizard Sultan    schedule 28.09.2012
comment
Странно, стек говорит, что вы пытаетесь преобразовать свою строку в целое число, а в коде вы, похоже, пытаетесь преобразовать ее в длинную !!   -  person Shades88    schedule 28.09.2012


Ответы (2)


Вы получаете это исключение:

java.lang.NumberFormatException: For input string: "1348756490255"
...
  java.lang.Integer.parseInt(Integer.java:495)

Это означает, что это слишком долго для целого числа. Максимальное значение для Integer равно 2 147 483 647, поэтому оно не работает на 134 875 649 025, что имеет смысл.

Однако вы утверждаете, что у вас возникла проблема с этим кодом:

long timeMillis=Long.parseLong(time);

что явно неверно, согласно трассировке стека. Вывод состоит в том, что вы используете код, отличный от того, который, по вашему мнению, вы используете, - синтаксический анализ строки должен работать без проблем. Лонг имеет максимальное значение 9 223 372 036 854 775 807, что намного больше, чем вам нужно.

person eis    schedule 27.09.2012
comment
да, я поддержу это. Я пробовал, нет проблем при разборе этой строки на длинную - person Shades88; 28.09.2012
comment
да, теперь он работает правильно. Извините за неправильный стек. - person Wizard Sultan; 28.09.2012

Трассировка стека говорит, что вы используете Integer.parseInt(...), а не Long.parseLong(...). Число в сообщении об ошибке, "1348756490255", намного больше, чем Integer.MAX_VALUE (2147483647).

Там также говорится, что ошибка возникает в строке 37 из TimeConverter.java, а в исходном коде, который вы даете, нет даже 37 строк. Возможно, вы забыли сохранить в редакторе и затем перекомпилировать.

Небольшое замечание: не используйте StringBuffers. Компилятор Java будет автоматически преобразовывать конкатенации String с помощью + в использование StringBuffer за кулисами.

person Olathe    schedule 27.09.2012
comment
Я согласен не использовать StringBuffer, но по другой причине: в этом случае следует использовать StringBuilder (и почти во всех случаях StringBuffer использовался в прошлом). Компилятор Java может и обычно делает оптимизацию, но также возможно, что он этого не делает. - person eis; 28.09.2012