JNI 기능을 완료하는 데 시간이 오래 걸릴 수 있으며 기능을 완료하는 동안 불확실 모드에서 JProgress 표시 줄을 실행하고 싶습니다. Oracle에서 제공하는 자습서를 읽었지 만 자습서의 성격 상 이해할 수 없습니다. 백그라운드 스레드에서이 함수를 실행해야한다는 것을 알았지 만 어떻게해야하는지 잘 모르겠습니다.JProgress Bar 불확정 모드가 업데이트되지 않습니다.
다음은 관련 코드입니다. 내가 누르면 함수 (mainCpp())를 호출 할 버튼 (runButton)이 있습니다.
public class Foo extends javax.swing.JFrame
implements ActionListener,
PropertyChangeListener{
@Override
public void actionPerformed(ActionEvent ae){
//Don't know what goes here, I don't think it is necessary though because I do not intend to use a determinate progress bar
}
@Override
public void propertyChange(PropertyChangeEvent pce){
//I don't intend on using an determinate progress bar, so I also do not think this is necassary
}
class Task extends SwingWorker<Void, Void>{
@Override
public Void doInBackground{
Foo t = new Foo();
t.mainCpp();
System.out.println("Done...");
}
return null;
}
/*JNI Function Declaration*/
public native int mainCpp(); //The original function takes arguments, but I have ommitted them for simplicity. If they are part of the problem, I can put them back in.
...//some codes about GUI
private void runButtonActionPerformed(java.awt.event.ActionEvent evt) {
ProgressBar.setIndeterminate(true);
Task task = new Task();
task.execute();
ProgressBar.setIndeterminate(false);
}
/*Declarations*/
private javax.swing.JButton runButton;
}
도움이 되길 바랍니다.
EDIT : 키 헤루가 제안한 것을 수행하려고 시도했지만 여전히 작동하지 않습니다. 당신은 다음을 사용하여 포함 된 개체의 필드에 인스턴스를 유지할 수 있습니다
class Task extends SwingWorker<Void, Void>{
@Override
public Void doInBackground() {
// I'm not sure of the code snippets if you are already in a
// Foo instance; if this is internal to Foo then you obviously do
// not need to create another instance, but just call mainCpp().
Foo t = new Foo();
t.mainCpp();
return null;
}
@Override
public void done()
// Stop progress bar, etc
...
}
}
다음과 같이 작동합니다 : 당신을 가정
doInBackround()에서 실행하는 것에 대한 가정은 정확합니다. SwindWorkers는 실행을 시작하기 위해'execute()'호출 만 있으면되므로 미리 작업자를 준비하면 버튼 작업에서 호출 할 수 있습니다. 또는 SwingWorker를 제자리에 만들고 실행할 수 있습니다. – kiheru
"사전에 노동자를 준비"하는 것이 무엇을 의미하는지 자세히 설명해 주시겠습니까? –