我们有一个C库(.lib windows和.a linux),它只允许创建一个单例,并且一旦实例化,也不会正常关闭(内存泄漏和线程保持活动状态).
重写它并将错误排除在外,是否有一种简单的方法可以在进程中隔离这种行为不当的代码,从而可以删除单例限制,并且可以对不清洁的整理进行沙盒处理?
我主要对任何进程中的选项感兴趣,如果确实有的话.一个单独的过程显然会解决它,但是会产生架构开销以允许远程控制库,除非有非常低影响的解决方案(它具有广泛的API,因此保持大量的粘合剂并不是特别有吸引力).
是否有任何好的工具可以从头文件生成java(如果需要,+ JNI支持),以便可以按原样使用C或C++库.有点像javah的逆转.真正的功能将在C/C++中,Java对于某些用户来说只是一个垫片.
我不是JNI的专家,但据我所知,Javah强迫你做到这一点.除非你自己编写一个转换层,否则它会强迫你让JNI-isms不必要地渗透到C代码中.手动编写转换层基本上是浪费时间,因为头文件中的所有信息都以此开头.
背景:我有一个ScrollView/TextView对,它接收来自外部源的间歇性文本流.它会在每次更新时自动滚动到底部.
我希望用户能够通过手动滚动到某个地方来突破自动向下滚动模式,但是我不清楚如何将手动滚动与我自己编写的程序滚动区分开来.
我的UI更新在计时器上运行以缓冲重绘:
private Handler outputUpdater = new Handler ();
private static String outputBuffer = "";
private static boolean outputHasChanged = false;
private static final Object lock = new Object ();
private Runnable outputUpdaterTask = new Runnable () {
public void run () {
synchronized (lock) {
// if the output has changed, update the TextView
if (outputHasChanged) {
TextView tv = (TextView) findViewById (R.id.textView);
tv.setText (outputBuffer);
}
// if the output has changed, or the scroll hasn't reached …Run Code Online (Sandbox Code Playgroud)