SwingWorker в другом готовом методе SwingWorker
Во-первых, я должен сообщить вам, что я изо всех сил стараюсь научиться кодировать на Java. Это было немного сложно, но я верю, что оно у меня есть. В прошлом я задавал пару вопросов в отношении SwingWorkers и тому подобного. Каждый из которых я думал, что у меня есть, но пришел, чтобы узнать, что я все еще учился делать. Надеюсь, на этот раз не один из тех времен.
С учетом вышесказанного, пожалуйста, дайте мне знать, что вы видите, что не соответствует стандартам, или может привести к проблемам в будущем.
Теперь на вопрос!Я создал JFrame, который загружает пару вещей, прежде чем он позволит пользователю перейти на другую страницу, нажать кнопки или что-то еще. Как только он загрузит данные, он разблокирует JFrame, чтобы позволить пользователю взаимодействовать с данными.
Проблема в том, что (на самом деле это не проблема, просто пояснение) мне нужно выполнить еще одну задачу, пока пользователь может взаимодействовать с JFrame таким образом, чтобы он не беспокоил их, но обновит JFrame на основе результаты он нашел. Примером может быть проверка версии. В зависимости от того, устарела версия или нет, сообщите об этом пользователю.
Пример кода Судоprotected void startJFrame() {
JFrame myFrame = new JFrame();//Starts with disable/invisible components. Preventing the user from doing to much before allowed.
SwingWorker<Void, Progress> loadingWorker = new SwingWorker<Void, Progress>() {
@Override
protected Void doInBackground() throws Exception {
publish(new Progress(0,"Loading This")); // Set Percent
loadingTasks.loadThis(); // Do Work!!
publish(new Progress(25,"Loading That")); // Set Percent
loadingTasks.loadThat(); // Do Work!!
publish(new Progress(50,"Loading More")); // Set Percent
loadingTasks.loadMore(); // Do Work!!
publish(new Progress(75,"Loading Last")); // Set Percent
loadingTasks.loadLast(); // Do Work!!
publish(new Progress(100,"Loading Complete"));// Set Percent
return null;
}
@Override
protected void process(List<Progress> ProgressList) {
for (Progress p : ProgressList) {
System.out.println(p.getInt() + "% " + p.getString()); //Show user percent and what its doing.
}
}
@Override
protected void done() {
try {
get();
loadingTasks.WrapUp();//Set Variables or other small stuff.
myFrame.userAllowed();//Lets the user interact with the whole JFrame.
SwingWorker<Void, Void> secondWorker = new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
versionCheck.makeItSo();// Do Work!!
return null;
}
@Override
protected void done() {
try {
get();
versionCheck.wrapUp();//Set Variables or other small stuff.
myFrame.showLabel();//Show a label with specific info.
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
};
secondWorker.execute();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
};
loadingWorker.execute();
}
Не по теме вопрос с этим кодом.Я обеспокоен созданием множества объектов, а не избавлением от них, просто чтобы передать несколько переменных. В частности,Прогресс объекты, создаваемые в первом методе doInBackground.
Считается ли это нормально, чтобы сделать это? Будет ли он автоматически распоряжаться объектами прогресса автоматически? Если нет, как бы я избавился от них после того, как с ними покончено?