Şu anda notları görüntülemek/kaydetmek için küçük bir uygulama üzerinde çalışıyorum. Her notun içeriği, uygulamayı kapattıktan sonra sabit sürücümdeki bir .properties dosyasında saklanır. Uygulamayı tekrar açarsanız, tüm notlar uygulamanın içine yüklenir.Java SwingWorker şimdi modeli güncellemek için
Bu yükleme işlemi devam ederken, işlemin durumunu gösteren bir progressbar içeren bir iletişim kutusu gösteriyorum. Ayrıca, bir GlassPane gösteriyorum, böylece kullanıcı yükleme sırasında GUI veya sandık/kaydetme ile etkileşimde bulunamaz.
public void load() {
new Thread() {
@Override
public void run() {
Properties data = new Properties();
FileInputStream iStream = null;
File[] files = sortPairs();
int fileIndex = -1;
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
pnlGlass = new MyGlassPane();
infoText = new JTextField();
progBar = new JProgressBar(0,100);
progBar.setValue(0);
progBar.setStringPainted(true);
infoBox = new LoadInfoDialog(infoText,progBar);
infoBox.setLocationRelativeTo(gui);
infoBox.setVisible(true);
infoBox.setDefaultCloseOperation(infoBox.DO_NOTHING_ON_CLOSE);
pnlGlass.setOpaque(false);
pnlGlass.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent me) {
me.consume();
}
});
gui.setGlassPane(pnlGlass);
pnlGlass.setVisible(true);
pnlGlass.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
}
});
for (File file : files) {
if (file.isFile()) {
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
iStream = new FileInputStream(file);
data.load(iStream);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (!(iStream == null)) {
try {
iStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
String title = data.getProperty("title");
String text = data.getProperty("text");
String erstellt = data.getProperty("date");
String fileName = data.getProperty("filename");
Note note = new Note(text, title);
note.setFileName(fileName);
note.setDate(erstellt);
fileIndex++;
final int fileIndexFinal = fileIndex;
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
progBar.setValue(progBar.getValue() + 100/fileCount);
infoText.setText("Lade Notizen, bitte warten..." + progBar.getValue() + "%");
noteModel.addNote(note);
System.out.println("Index:" + fileIndexFinal);
}
});
}
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
pnlGlass.setVisible(false);
infoBox.setVisible(false);
}
});
}
}.start();
}
benim çözüm oldukça dağınık olduğundan eminim:
takiben notlarını yüklenmesi için benim şimdiki Kod olduğunu. Bazı araştırmalardan sonra tam olarak bu amaçla "SwingWorker" adında bir sınıf olduğunu anladım (arka planda Taks çalıştıran ve gui'yi güncelleyen) AMA, SwingWorker içinden notumu nasıl oluşturabilirim (Modelime Not-Nesne ekle)?
Yayınlama ve işlem yöntemlerini kullanarak ilerleme çubuğumu güncelleyebileceğimi biliyorum, ancak SwingWorker'ı kullanarak bir nesneyi nasıl oluşturabilirim?
yükleme işlemi her not için aşağıdaki rutin yapmalıdır: .properties dosyadan
Okuma içeriği -> not Nesnesi -> JList içinde gösteri notu -> güncelleme progressbar. çekirdek işçi tanımlayarak
Yüklenen notu "yayınlamak için" yayınla "/" işlemini "kullanın, ilerleme için bir" PropertyChangeListener "monitörü kullanmayın – MadProgrammer
Lütfen [Swing Worker Trail] (https://docs.oracle.com/javase/tutorial/ adresini ziyaret edin) uiswing/concurrency/simple.html) – Sanjeev