无法从静态上下文中引用非静态 'sleep(long)'

Non-static 'sleep(long)' cannot be referenced from a static context

我正在尝试从我的 Utils 中调用函数 sleep,代码如下:

@Override
                        public void onError(String err) {
                            log("A pinger died");
                            if (errorHandlingMode.equals(SpeedtestConfig.ONERROR_FAIL)) {
                                PingStream.this.onError(err);
                                return;
                            }
                            if (errorHandlingMode.equals(SpeedtestConfig.ONERROR_ATTEMPT_RESTART) || errorHandlingMode.equals(SpeedtestConfig.ONERROR_MUST_RESTART)) {
                                Utils.sleep(100);
                                init();
                            }
                        }

这是我拥有的全部功能:

private void init() {
        if (stopASAP) return;
        if (c != null) {
            try {
                c.close();
            } catch (Throwable ignored) {
            }
        }
        new Thread() {
            public void run() {
                if (pinger != null) pinger.stopASAP();
                if (remainingPings <= 0) return;
                try {
                    c = new Connection(server, connectTimeout, soTimeout, recvBuffer, sendBuffer);
                    if (stopASAP) {
                        try {
                            c.close();
                        } catch (Throwable ignored) {
                        }
                        return;
                    }
                    pinger = new Pinger(c, path) {
                        @Override
                        public boolean onPong(long ns) {
                            boolean r = PingStream.this.onPong(ns);
                            if (--remainingPings <= 0 || !r) {
                                onDone();
                                return false;
                            } else return true;
                        }

                        @Override
                        public void onError(String err) {
                            log("A pinger died");
                            if (errorHandlingMode.equals(SpeedtestConfig.ONERROR_FAIL)) {
                                PingStream.this.onError(err);
                                return;
                            }
                            if (errorHandlingMode.equals(SpeedtestConfig.ONERROR_ATTEMPT_RESTART) || errorHandlingMode.equals(SpeedtestConfig.ONERROR_MUST_RESTART)) {
                                Utils.sleep(100);
                                init();
                            }
                        }
                    };
                } catch (Throwable t) {
                    log("A pinger failed hard");
                    try {
                        c.close();
                    } catch (Throwable ignored) {
                    }
                    if (errorHandlingMode.equals(SpeedtestConfig.ONERROR_MUST_RESTART)) {
                        Utils.sleep(100);
                        init();
                    } else onError(t.toString());
                }
            }
        }.start();
    }

我发现 Non-static 'sleep(long)' cannot be referenced from a static context

存在编译时错误

这是我拥有的以下实用程序:

package com.live.flutter_telephony_rf_example.core.base

import java.net.URLEncoder

object Utils {
    fun urlEncode(s: String?): String? {
        return try {
            URLEncoder.encode(s, "utf-8")
        } catch (t: Throwable) {
            null
        }
    }

    fun sleep(ms: Long) {
        try {
            Thread.sleep(ms)
        } catch (t: Throwable) {
        }
    }

    fun sleep(ms: Long, ns: Int) {
        try {
            Thread.sleep(ms, ns)
        } catch (t: Throwable) {
        }
    }

    fun url_sep(url: String): String {
        return if (url.contains("?")) "&" else "?"
    }
}

屏幕截图错误:

这里的问题是 Kotlin 根本没有静态方法。所以调用 Utils.sleep(...) 不是一个有效的方法。

相反,Kotlin 拥有对象,这些对象被视为单例并被实例化。因此,当从 Java 调用时,您需要额外的步骤来检索 Kotlin 公开为 INSTANCE 的单例实例。所以像这样:

Utils.INSTANCE.sleep(...);

作为替代解决方案,您还可以使用 @JvmStatic 注释,这将允许将方法解释为静态的:

@JvmStatic
fun sleep(...)