在我的应用程序中,我使用ClassLoader
加载课程,并且它正常工作。并且根据要求我必须加载类并同时在多个线程中执行该类,所以我使用了SwingWorker
但是在实现它之后它不起作用,不能执行类的方法(可能无法加载课程。)
SwingWorker的实现:
public class BackgroundWorker extends SwingWorker<Void, Integer>
{
int threadCount = 0;
private int max = 1000;
ConfigurationExecution _configExec;
boolean _value;
String _assemblyName;
public BackgroundWorker(ConfigurationExecution configExec, boolean value, String AssemblyName)
{
_configExec = configExec;
_value = value;
_assemblyName = AssemblyName;
}
// End
@Override
protected Void doInBackground() throws Exception
{
ExecuteSelenium selemHelper = new ExecuteSelenium();
selemHelper.runTest(_configExec, _value, _assemblyName);
return null;
}
@Override
protected void process(List<Integer> chunks)
{
int i = chunks.get(chunks.size()-1);
System.out.println(i);
}
@Override
protected void done()
{
try
{
get();
ClientReflection.threadCount--;
}
catch (ExecutionException | InterruptedException e)
{
e.printStackTrace();
}
}
使用上述课程:
BackgroundWorker[] threadArray = null;
public void RunTest()
{
int maxThreads = configExec.size();
threadArray = new BackgroundWorker[maxThreads];
for (int i = 0; i < configExec.size(); i++)
{
threadArray[i] = new BackgroundWorker(configExec.get(i),isFileOut,assemblyName);
threadArray[i].execute();
}
}
使用doInBackground
的{{1}}方法调用以下方法:
SwingWorker
因为我没有收到任何错误但也没有得到结果
是否我们无法同时从2个不同的线程在ClassLoader中加载相同的jar?
如果有人经历或解决了这种情况,那么请帮助。
编辑: 如果只调用了一个线程,那么它可以工作,但不能用于多线程。