警告: [deprecation] Handler中的Handler()已过时 final Handler hand1 = new Handler()
这是一个警告信息,提示你当前使用的 Handler()
构造函数已经过时。建议你更新代码,使用新的方式来创建和处理消息。
可以尝试使用 Handler(Looper looper)
构造函数来替代过时的构造函数。例如,可以这样修改代码:
final Handler hand1 = new Handler(Looper.getMainLooper());
这样可以获得主线程的 Looper,并将其传递给 Handler 构造函数。这样做可以确保 Handler 在主线程上运行,并正确处理消息。
注意:此修改适用于在主线程上创建 Handler 的情况。如果你需要在其他线程上创建 Handler,请使用相应的 Looper。
private void updateShowSeconds() { if (mShowSeconds) { // Wait until we have a display to start trying to show seconds. if (mSecondsHandler == null && getDisplay() != null) { mSecondsHandler = new Handler(); if (getDisplay().getState() == Display.STATE_ON) { mSecondsHandler.postAtTime(mSecondTick, SystemClock.uptimeMillis() / 1000 * 1000 + 1000); } IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF); filter.addAction(Intent.ACTION_SCREEN_ON); mContext.registerReceiver(mScreenReceiver, filter); } } else { if (mSecondsHandler != null) { mContext.unregisterReceiver(mScreenReceiver); mSecondsHandler.removeCallbacks(mSecondTick); mSecondsHandler = null; updateClock(); } } } private final BroadcastReceiver mScreenReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (Intent.ACTION_SCREEN_OFF.equals(action)) { if (mSecondsHandler != null) { mSecondsHandler.removeCallbacks(mSecondTick); } } else if (Intent.ACTION_SCREEN_ON.equals(action)) { if (mSecondsHandler != null) { mSecondsHandler.postAtTime(mSecondTick, SystemClock.uptimeMillis() / 1000 * 1000 + 1000); } } } }; private final Runnable mSecondTick = new Runnable() { @Override public void run() { if (mCalendar != null) { updateClock(); } mSecondsHandler.postAtTime(this, SystemClock.uptimeMillis() / 1000 * 1000 + 1000); } }; } 编译报错,lframeworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/clock.java:115: cannot findlsymbolsymbol method getstate()location: class android.view.Display if (getDisplay().getstate() == Display.STATE_ON) fframeworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/clock.java:115: cannot findlsymbolsymbol : variable STATE_ONlocation: class android.view.Display if (getDisplay().getstate() == Display.STATE_ON) fNote: Some input files use or override a deprecated API.Note: Recompile with -xlint:deprecation for details.Note: Some input files use unchecked or unsafe operations.Note: Recompile with -xlint:unchecked for details.2 errorsmake: *** fout/target/common/obi/Apps/SvstemlT intermediates/classes-full-dehun iarl Frror 4l
根据报错信息,可能是因为没有找到 getstate()
方法和 STATE_ON
变量,这可能是因为你的代码中没有正确引入 android.view.Display
类。你可以尝试在代码开头添加以下引入语句:import android.view.Display;
。另外,你的代码中也存在一些过时的 API 和未检查或不安全的操作,建议使用 -xlint:deprecation
和 -xlint:unchecked
对代码进行重新编译,以获取更详细的错误信息。
Exception caught in handler {"worker_id": "0", "exc": "OpenCV(4.8.0) /io/opencv/modules/imgproc/src/contours.cpp:195: error: (-210:Unsupported format or combination of formats) [Start]FindContours supports only CV_8UC1 images when mode != CV_RETR_FLOODFILL otherwise supports CV_32SC1 images only in function 'cvStartFindContours_Impl'\n", "traceback": "Traceback (most recent call last):\n File \"/opt/nuclio/_nuclio_wrapper.py\", line 118, in serve_requests\n await self._handle_event(event)\n File \"/opt/nuclio/_nuclio_wrapper.py\", line 312, in _handle_event\n entrypoint_output = self._entrypoint(self._context, event)\n File \"/opt/nuclio/main.py\", line 51, in handler\n contours, _ = cv2.findContours(mask_binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)\ncv2.error: OpenCV(4.8.0) /io/opencv/modules/imgproc/src/contours.cpp:195: error: (-210:Unsupported format or combination of formats) [Start]FindContours supports only CV_8UC1 images when mode != CV_RETR_FLOODFILL otherwise supports CV_32SC1 images only in function 'cvStartFindContours_Impl'\n\n"} 2023-07-16 10:23:22 /opt/nuclio/_nuclio_wrapper.py:395: DeprecationWarning: There is no current event loop 2023-07-16 10:23:22 loop = asyncio.get_event_loop() 2023-07-16 10:24:38 2023-07-16 10:24:40 0: 480x640 1 car, 1 truck, 82.9ms 2023-07-16 10:24:40 Speed: 16.6ms preprocess, 82.9ms inference, 24.2ms postprocess per image at shape (1, 3, 480, 640)
根据你提供的错误信息,问题出现在 cv2.findContours()
函数调用时。错误信息提示到了组合格式不受支持的问题。
这个问题通常是由于输入图像的格式不正确导致的。cv2.findContours()
函数需要传入一个二值图像(只包含0和255两个像素值)作为输入,而且图像的数据类型应为 np.uint8
。
你可以尝试在调用 cv2.findContours()
函数之前,对 mask_binary
进行以下处理,确保输入图像符合要求:
mask_binary = mask_binary.astype(np.uint8) # 将掩码二值图像转换为 np.uint8 类型
添加这行代码后,再次运行程序,看看是否能够解决问题。如果问题仍然存在,请确保 mask_binary
是一个正确的二值图像,并且数据类型是 np.uint8
。你可以使用 print(mask_binary.dtype)
来检查数据类型,并使用 print(mask_binary)
来检查图像的值范围和格式。如果问题仍然存在,请提供更多代码和上下文信息,以便更好地帮助你解决问题。