无法从静态上下文中引用非静态 '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(...)
我正在尝试从我的 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(...)