reply = new MethodReply(m);
reply = new MethodReturn(m);
         public void run()          {             try {               Type[] ts = me.getGenericParameterTypes();               m.parameters = deSerializeParameters(m.parameters, ts);            } catch (Exception e) {               if (DBusConnection.EXCEPTION_DEBUG) e.printStackTrace();               synchronized (outqueue) {                  outqueue.add(new DBusErrorMessage(m, new DBus.Error.UnknownMethod("Failure in de-serializing message ("+e+")"))); }               return;            }            try {                synchronized (infomap) {                  infomap.put(Thread.currentThread(), info);               }               Object result;               try {                  result = me.invoke(ob, m.parameters);               } catch (InvocationTargetException ITe) {                  if (DBusConnection.EXCEPTION_DEBUG) ITe.getCause().printStackTrace();                  throw ITe.getCause();               }               synchronized (infomap) {                  infomap.remove(Thread.currentThread());               }               if (!noreply) {                  MethodReply reply;                  if (Void.TYPE.equals(me.getReturnType()))                      reply = new MethodReply(m);                  else {                     // need to recursively convert Tuple with types                     if (Tuple.class.isAssignableFrom(me.getReturnType()))                        ((Tuple) result).getParameters(((ParameterizedType) me.getGenericReturnType()).getActualTypeArguments());                     else                        result = convertParameter(result, me.getGenericReturnType());                     reply = new MethodReply(m, result);                  }                  synchronized (outqueue) {                     outqueue.add(reply);                  }               }            } catch (DBusExecutionException DBEe) {               if (DBusConnection.EXCEPTION_DEBUG) DBEe.printStackTrace();               synchronized (outqueue) {                  outqueue.add(new DBusErrorMessage(m, DBEe));                }            } catch (Throwable e) {               if (DBusConnection.EXCEPTION_DEBUG) e.printStackTrace();               synchronized (outqueue) {                  outqueue.add(new DBusErrorMessage(m, new DBusExecutionException("Error Executing Method "+m.getType()+"."+m.getName()+": "+e.getMessage())));                }            }          }