Я пытаюсь сохранить все объекты сообщений, полученные за одну минуту, до карты дерева и после завершения одного mintue, сериализовать ее и вернуть байт [] в другой класс, тем временем очистить карту и начать хранить сообщения, полученные в следующий мин и т. д.Получение java.lang.NullPointerException
public class StoreMessage extends Thread implements Serializable{
public static byte[] b=null;
public static Map <Long,Message> map1=Collections.synchronizedMap(new TreeMap<Long,Message>());
public static Calendar c1=Calendar.getInstance();
public static int year=c1.get(Calendar.YEAR);
public static int month=c1.get(Calendar.MONTH);
public static int day=c1.get(Calendar.DAY_OF_MONTH);
public static int hour=c1.get(Calendar.HOUR_OF_DAY);
public static int min=c1.get(Calendar.MINUTE);
public static GregorianCalendar gc = new GregorianCalendar(year, month, day, hour, min);
public static Date d=gc.getTime();
public static long time1=(d.getTime())/60000; //precision till minute of the time elapsed since 1 Jan 1970
public static long time2=time1+1;
public static byte[] store(Message message)throws Exception{
while(true)
{
if(time1<time2)
{
long preciseTime=TimeUnit.MILLISECONDS.toNanos(System.currentTimeMillis())+(System.nanoTime()-startNanotime);
map1.put(preciseTime, message);
}
else
{
b=Serializer.serialize(map1);
map1.clear();
time1=time2;
time2++;
return b;
}
}
}
}
Почему этот код дает мне исключения нулевого указателя подсветка INT Len = b.length; другого класса, где он вызван, чтобы вернуть значение?
public static void record(Message message){
try{
//storing the serialized message in byte[]
byte[] b =StoreMessage.store(message);
int len=b.length; //<--highlights this line for null pointer exception
Даже после принятия вносит изменения (т.е. размещая возврат внутри блока еще), он не возвращает управление классом вызова. Кроме того, no Оператор SOP (при добавлении) печатается внутри блока else. Зачем?
The Serializer class
public class Serializer {
//serializes an object and returns a byte array
public static byte[] serialize(Object map) throws IOException
{
ByteArrayOutputStream b = new ByteArrayOutputStream();
ObjectOutputStream o = new ObjectOutputStream(b);
o.writeObject(map);
return b.toByteArray();
}
//de-serialization of the byte array and returns an object
public static Object toObject (byte[] bytes)
{
Object obj = null;
try
{
ByteArrayInputStream bis = new ByteArrayInputStream (bytes);
ObjectInputStream ois = new ObjectInputStream (bis);
obj = ois.readObject();
}
catch (Exception ex) { }
return obj;
}
}
вы имели в виду, чтобы положить 'вернуть b' вне остальное-отрасли? Он по-прежнему инициализируется как «null», потому что сначала будет выполняться if-ветвь. – Howard
Ваш StoreMessage.store (...) возвращает значение null, так как b всегда равно null. Извините, но это ужасный код - почему весь статический хлам? –
Я бы предположил, что 'b' равно null. –