Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > проблемы с Integer


Автор: Гость_pgood 3.11.2005, 16:58
Может ли быть такое или это что-то у меня глючит?:


String s = "1"; // к примеру
Integer i = new Integer(s);
try{
i.intVale();
} catch(NullPointerException e){
System.out.println("i="+i);
}


в результате выбрасывается исключение и выводится следующий результат:

i=1

Автор: batigoal 3.11.2005, 17:15
Да вроде не должно быть никаких исключений...

Автор: val 3.11.2005, 17:21
Вот такой код:
Код

    public static void main(String[] args) {
        String s = "1"; // к примеру
        Integer i = new Integer(s);
        try{
            i.intValue();
            System.out.println("I = " + i);
        } catch(NullPointerException e){
            System.out.println("i = " + i);
        }

    }


выдаёт "I = 1", так вы не совсем правы, в исключение мы не заходим...

Автор: pgood 3.11.2005, 17:25
на самом деле строку с цифрой я получаю из формы на JSP страничке через javax.servlet.http.HttpServletRequest request при чем этот request MULTIPART/FORM-DATA, но сути это не меняет, при

try{ Integer i = new Integer(s); }
catch(NumberFormatException e){}

исключение не выбрасывается

Добавлено @ 17:27
Цитата(val @ 3.11.2005, 17:21)
Вот такой код:
Код

    public static void main(String[] args) {
        String s = "1"; // к примеру
        Integer i = new Integer(s);
        try{
            i.intValue();
            System.out.println("I = " + i);
        } catch(NullPointerException e){
            System.out.println("i = " + i);
        }

    }


выдаёт "I = 1", так вы не совсем правы, в исключение мы не заходим...

если не ловить исключение, то его ловит AppServer. так что исключение точно выбрасывается

Автор: pgood 3.11.2005, 18:04
ну....., у кого-нть мысли есть?
а то я уже всю голову сломал smile

Автор: allex 3.11.2005, 18:10
pgood
Не в ту сторону копаешь. Опять же, неплохо бы StackTrace у exception посмотреть.

Автор: LSD 3.11.2005, 18:38
pgood такого не может быть в принципе, если конструктор не отработает нормально и будет выброшено исключение то кусок кода
Код
try
{
  i.intVale();
}
catch(NullPointerException e)
{
  System.out.println("i="+i);
}

не будет выполнен. Если же конструктор отработает без ошибок, то переменная i получит не null значение.
Метод i.intVale() тоже не может выкидывать NullPointerException, достаточно посмотреть его код:
Код
public int intValue()
{
  return value;
}


Так что ты действительно не там ищешь ошибку, смотри StackTrace ошибка у тебя в другом месте.

Автор: hatsumeika 3.11.2005, 18:58
могу предположить, что s = null.

но в этом случае происходит вот что:

java.lang.NumberFormatException: null

at java.lang.Integer.parseInt(Integer.java:415)

at java.lang.Integer.<init>(Integer.java:620)

at image.ImageRW.m(ImageRW.java:22)

at image.ImageRW.main(ImageRW.java:11)

Автор: corewithin 3.11.2005, 19:59
ого предложолил...
NumberFormat и NullPointer exceptions явно не сродни друг другу...

2pgood: даешь stack trace и code sample...

не боись ) тырить идеи никто не будет )

Автор: Guest 4.11.2005, 12:02
весь код сложно дать, там много классов завязано, дам только этот класс
Код

package pgood.wt;
public class Product{
    public static final String FORM_FIELD_NAME_PRODUCT_ID = "productId";
    public static final String FORM_FIELD_NAME_CATEGORY_ID = "categoryId";
    public static final String FORM_FIELD_NAME_TRADER_ID = "traderId";
    public static final String FORM_FIELD_NAME_NAME = "name";
    public static final String FORM_FIELD_NAME_DESCRIPTION = "description";
    public static final String FORM_FIELD_NAME_PRICE = "price";
    public static final String FORM_FIELD_NAME_PICTURE = "image";
    public static final int COLUMN_NUM_PRODUCT_ID = 1;
    public static final int COLUMN_NUM_CATEGORY_ID = 2;
    public static final int COLUMN_NUM_TRADER_ID = 3;
    public static final int COLUMN_NUM_NAME = 4;
    public static final int COLUMN_NUM_DESCRIPTION = 5;
    public static final int COLUMN_NUM_PRICE = 6;
    public static final int COLUMN_NUM_PICTURE = 7;
    public static final int NUM_CONDITION = 8;
    private Integer productId;
    private Integer categoryId;
    private Integer traderId;
    private String name;
    private String description;
    private Double price;
    private byte[] picture;
    
    public Product(){ }
    public Product(javax.servlet.http.HttpServletRequest request){
        this();
        if(org.apache.commons.fileupload.FileUpload.isMultipartContent(request)){
            org.apache.commons.fileupload.DiskFileUpload upload = new org.apache.commons.fileupload.DiskFileUpload();
            try{ java.util.List items = upload.parseRequest(request);
                java.util.Iterator iter = items.iterator();
                while (iter.hasNext()){
                    org.apache.commons.fileupload.FileItem item = (org.apache.commons.fileupload.FileItem) iter.next();
                    if(0==item.getFieldName().compareTo(FORM_FIELD_NAME_PRODUCT_ID)){
                        try{ setProductId(new Integer(item.getString())); }
                        catch(NumberFormatException nfe){ System.out.println("--> From pgood.wt.Product.constructor() in setProductId() NumberFormatException:\n\t -x "+nfe.getMessage()); }
                    } else if(0==item.getFieldName().compareTo(FORM_FIELD_NAME_CATEGORY_ID)){                    
                        try{ setCategoryId(new Integer(item.getString())); }
                        catch(NumberFormatException nfe){ System.out.println("--> From pgood.wt.Product.constructor() in setCategoryId() NumberFormatException:\n\t -x "+nfe.getMessage()); }
                    } else if(0==item.getFieldName().compareTo(FORM_FIELD_NAME_TRADER_ID)){
                        try{ setTraderId(new Integer(item.getString())); }
                        catch(NumberFormatException nfe){ System.out.println("--> From pgood.wt.Product.constructor() in setTraderId() NumberFormatException:\n\t -x "+nfe.getMessage()); }
                    } else if(0==item.getFieldName().compareTo(FORM_FIELD_NAME_NAME)){
                        setName(item.getString());
                    } else if(0==item.getFieldName().compareTo(FORM_FIELD_NAME_DESCRIPTION)){
                        setDescription(item.getString());
                    } else if(0==item.getFieldName().compareTo(FORM_FIELD_NAME_PRICE)){
                        try{ setPrice(new Double(item.getString())); }
                        catch(NumberFormatException nfe){ System.out.println("--> From pgood.wt.Product.constructor() in setPrice() NumberFormatException:\n\t -x "+nfe.getMessage()); }
                    } else if(0==item.getFieldName().compareTo(FORM_FIELD_NAME_PICTURE)){
                        if (!item.isFormField()){
                            picture = item.get();
                        }
                    }
                }
            } catch(org.apache.commons.fileupload.FileUploadException fue){ System.out.println("--> From pgood.wt.Product.constructor() FileUploadException:\n\t -x "+fue.getMessage()); }
        } else{ System.out.println("--> From pgood.wt.Product.constructor():\n\t -x No multipart request"); }
    }
...
    public void setProductId(Integer PRODUCTID){ productId = PRODUCTID; }
    public void setCategoryId(Integer CATEGORYID){ categoryId = CATEGORYID; }
    public void setTraderId(Integer TRADERID){ traderId = TRADERID; }
    public void setName(String NAME){ name = NAME; }
    public void setDescription(String DESCRIPTION){ description = DESCRIPTION; }
    public void setPrice(Double PRICE){ price = PRICE; }
    public void setPicture(byte[] PICTURE){ picture = PICTURE; }
    public Integer getProductId(){ return productId; }
    public Integer getCategoryId(){ return categoryId; }
    public Integer getTraderId(){ return traderId; }
    public String getName(){ return name; }
    public String getDescription(){ return description; }
    public Double getPrice(){ return price; }
    public byte[] getPicture(){ return picture; }
...
    public void fillInsertPrepStatment(java.sql.PreparedStatement stmt){
        try{
            try{ stmt.setInt(COLUMN_NUM_PRODUCT_ID,getProductId().intValue()); }
            catch(NullPointerException npe){
                stmt.setNull(COLUMN_NUM_PRODUCT_ID,java.sql.Types.INTEGER);
                System.out.println("--> From pgood.wt.Product.fillInsertPrepStatment() NullPointerException:\n\t-x ProductId="+getProductId());
            }
            try{ stmt.setInt(COLUMN_NUM_CATEGORY_ID,getProductId().intValue()); }
            catch(NullPointerException npe){
                stmt.setNull(COLUMN_NUM_CATEGORY_ID,java.sql.Types.INTEGER);
                System.out.println("--> From pgood.wt.Product.fillInsertPrepStatment() NullPointerException:\n\t-x CategoryId="+getCategoryId());
            }
            try{ stmt.setInt(COLUMN_NUM_TRADER_ID,getProductId().intValue()); }
            catch(NullPointerException npe){
                stmt.setNull(COLUMN_NUM_TRADER_ID,java.sql.Types.INTEGER);
                System.out.println("--> From pgood.wt.Product.fillInsertPrepStatment() NullPointerException:\n\t-x TraderId="+getTraderId());
            }
            stmt.setString(COLUMN_NUM_NAME,getName());
            stmt.setString(COLUMN_NUM_DESCRIPTION,getDescription());
            try{ stmt.setDouble(COLUMN_NUM_PRICE,getPrice().doubleValue()); }
            catch(NullPointerException npe){
                stmt.setNull(COLUMN_NUM_PRICE,java.sql.Types.DOUBLE);
                System.out.println("--> From pgood.wt.Product.fillInsertPrepStatment() NullPointerException:\n\t-x Price="+getPrice());
            }
            try{
                javax.sql.rowset.serial.SerialBlob sbl = new javax.sql.rowset.serial.SerialBlob(getPicture());
                stmt.setBinaryStream(COLUMN_NUM_PICTURE,sbl.getBinaryStream(),(int)sbl.length());
            } catch(Exception npe){ stmt.setNull(COLUMN_NUM_PICTURE,java.sql.Types.BLOB); }
        }catch(java.sql.SQLException e){ System.out.println("--> From pgood.wt.Product.fillInsertPrepStatment() SQLException:\n\t-x "+e.getMessage()); }
    }
...
}


исключение выбрасывается на 78,83,88, но на 78 там значение действительно null, а на 83, 88, на печать выводится значение заданное в строке при конструировании. Значения задаются в конструкторе класса, строки 36,39,42

Автор: Guest 4.11.2005, 12:13
LSD я понимаю, что такого в принципе не может быть, поэтому к вам и обратился, может я где-то парюсь

Автор: LSD 4.11.2005, 12:26
Так посмотри на код у тебя в 78 строке stmt.setInt(COLUMN_NUM_PRODUCT_ID,getProductId().intValue());, в 83 stmt.setInt(COLUMN_NUM_CATEGORY_ID,getProductId().intValue()); и в 88 stmt.setInt(COLUMN_NUM_TRADER_ID,getProductId().intValue());. Ты везде запрашиваешь один и тот же ProductId который действительно null, а на печать в catch выводишь другие поля.

Автор: pgood 4.11.2005, 12:44
smile так и получиось, я запарился, спасибо за помощь

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)