[英]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.