gpt4 book ai didi

java - 如何在一个java进程中调用我的jar文件

转载 作者:行者123 更新时间:2023-12-02 00:28:21 25 4
gpt4 key购买 nike

我已经执行了jar文件,并且我使用java -jar xx.jar -file xx.file来执行它。现在,我需要使用该jar文件超过56次并发,所以应该有超过56个java.lang.jar文件。任务管理器中的exe。但这会花费我的电脑大量资源,是否有方法只启动一个java进程并使用不同的参数执行。不知道你是否能明白我的意思,如果有不清楚的地方,请告诉我。jar文件不是我写的,我只有二进制文件。

有什么线索吗?

还有一个问题,如果有超过 56 个 java 进程,什么原因会使我的电脑变慢非常非常慢?我可以将jvm设置为低内存使用或低CPU使用来修复它吗?

谢谢,尤金

最佳答案

这可以在一个 Java 应用程序中实现,无需使用单独的进程......

在此示例中,我启动了一个单独的可执行 jar 文件 10 次。我使用标准 JarFile 类来查询主类,然后在新线程上执行它。我还为每个实例使用单独的类加载器。这很重要,因为如果没有它,单例会在单独的应用程序之间发生冲突。

public static void main(String[] args) {

for (int i = 0; i < 10; i++) {
try {
File file = new File("foo.jar");
JarFile jar = new JarFile(file);
String main = jar.getManifest().getMainAttributes()
.getValue(Name.MAIN_CLASS);

URLClassLoader freshLoader = new URLClassLoader(
new URL[] { file.toURI().toURL() }, null);

Class<?> classToLoad = Class.forName(main, true, freshLoader);
Class<?>[] argTypes = new Class[] { String[].class };
final String[] mainArgs = new String[] { "arg1", "arg2" };
final Method method = classToLoad.getMethod("main", argTypes);

Runnable job = new Runnable() {
@Override
public void run() {
try {
method.invoke(null, (Object) mainArgs);
} catch (Exception e) {
e.printStackTrace();
}
}
};
new Thread(job, "Thread :" + jarFile).start();

} catch (Exception e) {
e.printStackTrace();
}
}
}

测试应用程序类(包含在可执行 jar 文件 foo.jar 中)以模拟您的第 3 方 jar...

public class Main {

private static int counter;

public static void main(String[] args) {
JFrame frame = new JFrame("Test frame");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new GridLayout(2, 1));
frame.getContentPane().add(new JLabel("instance " + counter));
frame.getContentPane().add(
new JLabel("launched with " + Arrays.asList(args)));
frame.pack();
frame.setVisible(true);

counter++;
}

}

关于java - 如何在一个java进程中调用我的jar文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9615770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com