当前位置: 首页 > 知识库问答 >
问题:

获取java。lang.NullPointerException

曾河
2023-03-14

我试图将一分钟内收到的所有消息对象存储到树映射中,并在一分钟后将其序列化,并将字节[]返回到另一个类,同时清除映射并开始存储下一分钟内收到的消息,等等。

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 

即使进行了修改(即将返回放在else块中),它也不会将控件返回给调用类。此外,在else块内未打印SOP语句(添加时)。为什么?

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;
        }
    }

共有1个答案

焦宁
2023-03-14

这是因为您的b变量是null。请看这里:

输入方法并进行检查if(时间1

 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;
      }
 }
 }

 类似资料:
  • 问题内容: 用Java获取IP地址的最佳方法是什么?我正在尝试,但是它返回了我的计算机IP地址。我想是这样。我也试图从类似的服务中通过HTML获取IP,但是我认为这不是一个好主意。 问题答案: 以下内容使用Amazon Web服务并为我工作。

  • 问题内容: 我有一个列表,程序是这样的:。有什么方法可以使用T变量获取类的名称(因此我可以从内部知道T是否为String,Socket等)? 编辑:没关系,在这里找到了答案。 问题答案: 简短答案 :您不能。 长答案 : 由于使用Java实现泛型的方式,泛型T在运行时不会保留。您仍然可以使用私有数据成员: 用法示例:

  • 问题内容: 我在使用泛型时遇到麻烦。给出以下示例: 什么 ???应该 ? 不工作… 也不。 不工作… 如果有Java泛型专家,我需要帮助…:/ 问题答案: 由于类型擦除,您可能无法获得除外。你将不得不使用不安全的类型转换投下的-具体而言,将做的工作。

  • 本文向大家介绍Java如何获取Log4j,包括了Java如何获取Log4j的使用技巧和注意事项,需要的朋友参考一下 示例 当前版本(log4j2) 使用Maven: 将以下依赖项添加到POM.xml文件中: 使用常春藤: 使用Gradle: 获取log4j 1.x 注意: Log4j 1.x已达到寿命终止(EOL)(请参阅备注)。 使用Maven: 在POM.xml文件中声明此依赖项: 使用常春藤

  • 本文向大家介绍Java获取JVMTI环境,包括了Java获取JVMTI环境的使用技巧和注意事项,需要的朋友参考一下 示例 内部Agent_OnLoad方法:            

  • 问题内容: 我对Java不了解。我需要在Windows上构造URI的字符串表示形式。有时我得到的是:有时是:。现在,我正在做的是: 上面的方法适用于不带前缀但带前缀的路径。方法通过附加当前目录的值将其转换为无效的URI,因此路径变为无效。 请提出一种为两种路径获取正确URI的正确方法,以帮助我。 问题答案: 这些是有效的文件uri: 所以,你需要删除或为Windows和Linux操作系统。