- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 jSerialComm 库与 SerialPort 进行通信。我编写了一个 SerialDataListener 来使用重写的 serialEvent 方法读取字节,如下所示:
@Override
public void serialEvent(SerialPortEvent event) {
if (event.getEventType() != SerialPort.LISTENING_EVENT_DATA_AVAILABLE) return;
int numBytesAvailable = serialPort.bytesAvailable();
if (numBytesAvailable < 0) {
logger.error("Port is not open.. returning without any action");
return;
}
byte[] newData = new byte[numBytesAvailable];
int readData = serialPort.readBytes(newData, numBytesAvailable);
for (int i = 0; i < numBytesAvailable; i++) {
byte b = newData[i];
logger.info("Starting new response");
response = new Response();
response.addByte(b);
}
}
现在,如果我确实接收到数据并且后续代码以某种方式进入 NUllPointerException(一个例子是响应的构造函数被调用并抛出 NPE),则 SerialPort 已在库的 SerialPort 类中被编程为
这是一段代码:
//Line 895 of the class SerialPort) (from dependency: com.fazecast:jSerialComm:1.3.11).
while (isListening && isOpened) { try { waitForSerialEvent(); } catch (NullPointerException e) { isListening = false; } }
问题如下:
final
,因此编写我自己的类实现来替换燕子是毫无疑问的。我该如何继续?除了这个问题之外,jSerialComm 似乎可以很好地满足大多数其他用例,因此我可能不会很快从它迁移。TIA拉胡尔
最佳答案
1) Why was the exception swallowed and listening stopped inside the library? Are there any design reasons?
您需要询问代码的作者。
但是,这似乎是有意为之,因为 waitForSerialEvent
被声明为抛出 NullPointerException
。
如果我是你,我会更深入地研究 NPE 被抛出的位置以及原因。修改代码以打印堆栈跟踪,而不是完全消除异常。这可能是一种“黑客”解决方法,或者可能有这样做的合法理由。
如果我们假设客户端的监听器代码可能会抛出 NPE,那么在我看来,事件线程假设所有 NPE 都可以被压缩是错误的。
但是查看代码,我还可以看到故意抛出 NPE 来(显然)发出错误信号的地方;例如在 SerialPortInputStream
的 read
方法中。因此,我并不清楚 NPE 是否应该被压制。
2) The SerialPort class itself is final and hence writing my own implementation of the class to replace the swallow is out of question. How do I proceed?
代码位于 GitHub 上,因此您可以 fork 存储库、开发补丁并提交拉取请求。
4) Why just a NPE, other exceptions could arise too. So then at least, I will have to handle the exceptions myself. Is this approach of my own handlers correct then?
好问题。
<小时/>但实际上,所有这些问题最好向代码作者提出。他似乎确实回应了作为问题发布的问题……如果它们相关的话。
关于java - jSerialComm 中没有异常句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50037036/
我设置了 Helm 柄和 Helm 柄。我有tiller-deploy。昨天,我可以定期运行了。但今天我收到此错误消息 Error: could not find a ready tiller pod
我以前已将分er安装到特定的 namespace 中。 我设置了一个环境变量来设置'tiller'命名空间-但我不记得该环境变量的名称-而且似乎无法通过网络搜索找到它。 这是什么 key ? 最佳答案
当我在 View 模型中使用如下界面时 class MainViewModel @ViewModelInject constructor( private val trafficImagesR
我正在尝试找到如何在某个 fragment 相关场景中定义 Hilt 的解决方案。我有以下设置: Activity 父 fragment 1 子 fragment 1 子 fragment 2 ...
Hilt 指出如果没有@Provides 注解就不能提供这个接口(interface): interface PlannedListRepository { fun getAllLists()
我的问题非常简单明了:两个注释/示例之间有什么区别: 例子一 @Singleton class MySingletonClass() {} @Module @InstallIn(FragmentCom
我是一名优秀的程序员,十分优秀!