我创建了一个放入jar的SocketClient对象,我想在运行java程序时调用它,以便socket启动然后我可以通过外部应用程序连接到它。如何在程序开始时调用该对象。
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;
}
}
答案 0 :(得分:0)
让我们考虑一个简单的例子,它可以帮助你做你想做的事。
假设您将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
这有帮助吗?