Hãy thử làm điều này:
private void startTask() {// main method that creates the background task or class that implements the SwingWorker
AppContext appContext = AppContext.getAppContext();
if(appContext!=null){
appContext.remove(SwingWorker.class);
}
MassiveMigrationTask task = new MassiveMigrationTask();// class that implements the SwingWorker
task.execute();// this process implicitly adds the SwingWorker.class to the appContext
}
Như mô tả: "Các AppContext là một bảng tham chiếu bởi ThreadGroup mà các cửa hàng hợp dịch vụ ứng dụng" Vì vậy, vấn đề này đang xảy ra về cơ bản vì AppContext đang lưu tên của chủ đề được gọi là SwingWorker ..., vì vậy nếu bạn cố gắng tạo một thể hiện khác của chuỗi, bạn có thể sẽ không thành công, vì nó đánh giá tên chủ đề đó trước khi thực hiện một cái mới hoặc ít nhất là đặt mới trong đống đề được thực thi, cảm thấy tự do trao đổi với các mã ở đây:
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/sun/awt/AppContext.java
PS: Chú ý: "Nếu bạn không viết một dịch vụ ứng dụng, hoặc không biết điều gì là, vui lòng không sử dụng lớp học này "
Bạn có nghĩa là bạn muốn tái sử dụng lớp thực hiện SwingWorker của bạn, hoặc thể hiện của lớp? – Qwerky
Tôi không biết có lẽ tôi đã nhận được một cái gì đó sai, nhưng khi tôi tạo ra trường hợp công nhân và gọi execute() phương pháp không có gì được thực hiện. Tuy nhiên, khi tôi cố gắng gọi phương thức doInBackground(), các công nhân đã thực hiện –