相关疑难解决方法(0)

如何在运行时加载jar文件

我被要求构建一个能够在运行时加载新代码(扩展)的java系统.在代码运行时如何重新加载jar文件?或者我如何装一个新的罐子?

显然,由于恒定的正常运行时间很重要,我想添加在其中重新加载现有类的能力(如果它不会使事情复杂化太多).

我应该注意什么?(把它想象成两个不同的问题 - 一个关于在运行时重新加载类,另一个关于添加新类).

java runtime jar classloader

72
推荐指数
3
解决办法
15万
查看次数

如何在运行时从外部jar访问方法?

这是发布在以下问题的延续:如何在运行时加载jar文件

我不确定如何继续方法调用级别.根据我的理解,从clazz对象,我将使用getMethod或getDeclaredMethod来获取一个Method对象,我将从该对象调用invoke.当然,调用需要一个实例.这会是示例代码中所谓的doRun吗?

我是否需要执行doRun.run()方法调用,即使我想执行一个不同于main的方法(假设它是在运行调用调用的doRun对象上的主要方法)?

为了进一步澄清原帖,我问:doRun.run()是否启动了一个新线程来执行clazz类型的类对象的实例?

感谢您帮我解决这个问题.

我确实看过"how-should-i-load-jars-dynamic-at-runtime"(抱歉,只允许一个超链接),但这看起来违反了我引用的第一篇文章中的Class.newInstance邪恶警告.

java runtime jar classloader

6
推荐指数
1
解决办法
8768
查看次数

如何让JNI在调用本机函数时重新加载共享库?

背景

我在JAVA中有一个本机函数

package mypackage;

public class MyWrapper {

    private native int
    wrapFilterRawRequest(String config, String rawRequest);

    public void 
    processRequest( String configPath,String rawRequest){
        int status = 0; 
        status = new MyWrapper().wrapFilterRawRequest(configPath, rawRequest);
        status2 = new MyWrapper().wrapFilterRawRequest(configPath, rawRequest);
    }

    static{
        System.loadLibrary("mylibrary");
    }

}
Run Code Online (Sandbox Code Playgroud)

和C中的JNI Wrapper一样

int processRequest(char *conf, char *req)
{
    int status = 0;   
    // Do something here
    return status;
}

JNIEXPORT jint JNICALL Java_mypackage_MyWrapper_wrapFilterRawRequest
(JNIEnv *env, jobject obj, jstring config, jstring rawRequest)
{
    jint status = 0;

    const char *conf, *req; …
Run Code Online (Sandbox Code Playgroud)

c java java-native-interface

3
推荐指数
1
解决办法
5357
查看次数

标签 统计

java ×3

classloader ×2

jar ×2

runtime ×2

c ×1

java-native-interface ×1