0

这只是我目前正在工作的一部分,我想使用 currentTimeMillis() 来打印加载图像的时间 为什么它不起作用?

package method;

import java.io.PrintWriter;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Date;

 public class TracingInvocationHandler implements InvocationHandler {

private Object target;
private PrintWriter out;

public TracingInvocationHandler(Object target, PrintWriter out) {
    this.target = target;
    this.out = out;

}

@Override
public Object invoke(Object proxy, Method method, Object[] args)
        throws Throwable {
     long startTime = System.currentTimeMillis();
        Object result = null;
        out.println("Image " + method.getName() + " (...) entered.");
        result = method.invoke(target, args);
        out.println("Image " + method.getName() + " (...) returned.");
     long endTime = System.currentTimeMillis();
       System.out.printf(" [%s] %s Image %s took %d ms:",new Date().toString(), method.getName(),args[0], (endTime - startTime) + "ms");
    return result;

}

   public static Object createProxy(Object target, PrintWriter out) {
    Class<?> targetClass = target.getClass();
    ClassLoader currentClassLoader = targetClass.getClassLoader();
    Class<?>[] interfaces = targetClass.getInterfaces();
    InvocationHandler handler = new TracingInvocationHandler(target, out);
    return Proxy.newProxyInstance(currentClassLoader, interfaces, handler);
}
4

3 回答 3

4

+ "ms"从中删除(endTime - startTime) + "ms"。模式中的相应格式%d需要一个数字对象。 (endTime - startTime) + "ms"产生一个String.

您可能收到了异常。下次你问问题时,请包括它。这次你很幸运。

于 2013-08-30T21:10:49.570 回答
0

这是因为您将一个长原语转换为浮动,我建议您在您转换的地方使用一个变量:例如:

long totalTime = endTime - startTime;
String strTotalTime = String.valueOf(totalTime);
System.out.printf(" [%s] %s Image %s took %s ms:",
    new Date().toString(), method.getName(), args[0], strTotalTime);
于 2013-08-30T21:16:47.650 回答
-1

它被调用,但我没有看到你将它传递给 sysout,这就是它不可见的原因。那就是你在做:

  long endTime = System.currentTimeMillis();
       System.out.printf(" [%s] %s Image %s took %d ms:",new Date().toString(),

代替:

  long endTime = System.currentTimeMillis();
       System.out.printf(" [%s] %s Image %s took %d ms:",new Date(endTime).toString(),
于 2013-08-30T21:10:28.857 回答