簡體   English   中英

如何將對象注入jar中的類?

[英]How to inject an object into a class in a jar?

我創建了一個放置在jar中的SocketClient對象,我想在運行Java程序時調用它,以便啟動套接字,然后可以通過外部應用程序連接到它。 我將如何在程序啟動時調用該對象。

SocketClient

public class SocketClient {

    private boolean isCon = false;

    public SocketClient() {

    }

    public void communicate() {
        while(!isCon) {
            try {
                Socket socket = new Socket("localHost", 9090);
                System.out.println("Connected");
                isCon = true;
                ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
                AbstractScript passScript = getAbstractScript();
                System.out.println("Passing Object");
                oos.writeObject(passScript);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }


    public AbstractScript getAbstractScript() throws Exception {
        Class reflectClass = AbstractScript.class;
        Object construct;
        construct = reflectClass.newInstance();
        AbstractScript newAbstractScript = (AbstractScript) construct;
        return newAbstractScript;
    }

    public boolean isRunningScript() throws Exception {
        Method method;
        Class reflectClass = AbstractScript.class;
        if(reflectClass != null) {
            method = reflectClass.getDeclaredMethod("isRunning", Boolean.class);
            try {
                Object returnValue = method.invoke(null);
                Boolean value = (Boolean) returnValue;
                return value;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return false;
    }
}

讓我們考慮一個簡單的示例,它可以幫助您完成所需的工作。

假設您將SocketClient類編譯到一個名為MySocketStuff.jar的jar文件中,並且您的外部應用程序打包到了一個名為MyApplication.jar的jar中

為了讓您的外部應用程序使用SocketClient類,您只需要在運行應用程序時確保jar在類路徑中即可,因此類加載器將加載這些類。

然后,您可以像在任何其他開發環境中一樣使用該類。

假設您的main方法具有以下簡單之處:

import my.socket.stuff.package.SocketClient;  // you'll need the jar on your class path when you compile this file!

public class MyMainClass {
    public static void main(String[] args) {
        // instantiate the object
        SocketClient mySocketClient = new SocketClient(); // create the object
        // do stuff
        mySocketClient.communicate();
        // ...
    }
}

編譯了這個jar之后(您可以決定是否要在jar中包含導入的類...),您可以從命令行像下面這樣調用程序:

java -cp "<path to MySocketStuff.jar>;<path to MyApplication.jar>" MyMainClass

這有幫助嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM