Я новичок в параллельных вычислениях. Я работаю над Java в Apache Netbeans. Моя недавняя работа была посвящена семафорам с использованием Java-классов Semaphore и Thread. В этом смысле мне пришлось создать программу, которая с помощью индикаторов выполнения имитирует процесс доставки кредитной карты, который зависит от пяти подпроцессов (моделируемых с помощью потоков). Каждый подпроцесс имеет время, которое моделируется в программе, в данном случае с использованием метода сна из потоков. Реализация семафора заключается в постепенном увеличении панели general в зависимости от других процессов. Если один из них завершен, его можно заполнить на общей панели. Еще следует добавить, что подпроцессы также имеют соответствующие индикаторы выполнения. Моя проблема возникает в классах BarraGeneral и SubProceso, они представляют собой общий процесс и один подпроцесс. В их переопределенных методах запуска я симулирую время и, конечно же, рисую, но этого не происходит. Я могу сказать, что это действительно работает, потому что на консоли вы можете проверить отпечатки, проблема, как я уже сказал, в том, что столбцы не отражают этот прогресс, он просто меняется от 0% до 100%.
Я пытался решить эту проблему, уменьшив время симуляции сна, но проблема не в этом. Кроме того, я отладил, и столбцы фактически меняют свое значение на каждой итерации.
Код:
package espe.edu.ec.laboratorio1p2;
import java.util.ArrayList;
import java.util.concurrent.Semaphore;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JProgressBar;
/**
*
* @author DARÍO BENAVIDES
*/
public class BarraGeneral extends Thread{
private int id;
private Semaphore aportes;
private ArrayList porcentajes;
private int nHilos;
private JProgressBar bar;
BarraGeneral(int id, Semaphore aportes, ArrayList porcentajes, int nHilos, JProgressBar bar){
this.id = id;
this.aportes = aportes;
this.porcentajes = porcentajes;
this.nHilos = nHilos;
this.bar = bar;
}
@Override
public void run(){
int a;
for(int i = 0; i < nHilos; i++){
try {
aportes.acquire();
a = bar.getValue();
bar.setValue(a + porcentajes.get(i));
System.out.println(porcentajes.toString());
} catch (InterruptedException ex) {
Logger.getLogger(BarraGeneral.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
package espe.edu.ec.laboratorio1p2;
import java.util.ArrayList;
import java.util.concurrent.Semaphore;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JProgressBar;
import javax.swing.event.ChangeListener;
/**
*
* @author DARÍO BENAVIDES
*/
public class SubProceso extends Thread{
private Semaphore aportes;
private int id;
private int tiempo;
private int porcentaje;
private ArrayList porcentajes;
private JProgressBar bar;
SubProceso(Semaphore aportes, int id, int tiempo, int porcentaje, ArrayList porcentajes, JProgressBar bar){
this.aportes = aportes;
this.id = id;
this.tiempo = tiempo;
this.porcentaje = porcentaje;
this.porcentajes = porcentajes;
this.bar = bar;
}
@Override
public void run(){
for(int i = 1; i
Подробнее здесь: https://stackoverflow.com/questions/786 ... ng-on-java
Как я могу сделать индикатор выполнения с помощью JProgressBar из Swing в Java? ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему добавление неопределенного JProgressBar в JTable убивает анимацию?
Anonymous » » в форуме JAVA - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-