Merhabalar, başlıktada belirttiğim gibi bir sorun yaşıyorum. Yapmak istediğim şu: Belirlenen bir klasörde dosya yaratılma olayı dinlenecek(bu dosyalar .jpg türünde olacak) eğer yeni dosya yaratılırsa programda textbox'a girilmiş olan değer ile dosya ismi değiştirilecek, textbox içeriği değiştirilmediği sürece dosya isimleri resim_1, resim_2, resim_3... şeklinde devam edecek eğer textbox içeriği(yani resim değeri) değiştirilirse tekrardan 1'den başlayarak isimlendirecek. elma_1, elma_2 gibi. Benim yaptıklarıma gelirsek ben programı bu şekilde yaptım fakat while ile sürekli klasörü dinlediğim için JFrame donuyor textbox vs herşey kilitleniyor. java.nio kütüphanesini denedim orda da dosya ismindeki artış yüzünden (_1, _2, _3) sonsuz döngüye giriyor. Bu yüzden ben de kendim yazdım fakat dediğim gibi kilitlenme olayını çözemedim. Kodları aşağıda veriyorum.

import java.io.File;
import java.io.FilenameFilter;

public class NewClass{
    int i = 0;
    File klasor = new File("E:\\\\yeni");
    File[] dosyalar = klasor.listFiles();
    int sayac =1;
    File yeniDosya;

public void adDegistir(String dosyaAdi) throws InterruptedException{
    FilenameFilter filter = new FilenameFilter() {

        @Override
        public boolean accept(File dir, String name) {
           return name.endsWith(".jpg");
        }
    };
    while(true){
        dosyalar = klasor.listFiles(filter);
        if(dosyalar.length > i){
                File eskiDosya = new File(dosyalar[dosyalar.length-1].getPath().toString());
                yeniDosya = new File("E:\\\\yeni\\\\"+dosyaAdi+"_"+String.valueOf(sayac)+".jpg");

                System.out.println("Eski dosya : "+eskiDosya.getName());
                System.out.println("Yeni dosya : "+yeniDosya.getName());

                if(eskiDosya.renameTo(yeniDosya)){
                    System.out.println("Dosyanın adı değiştirildi");
                }

            sayac++;
            i++;
        }
    }

}
}

Bu da JFrame sınıfım

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class NewJFrame extends javax.swing.JFrame {

    NewClass newclass = new NewClass();

public NewJFrame() {
    initComponents();

}

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    jTextField1 = new javax.swing.JTextField();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jTextField1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jTextField1ActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(109, 109, 109)
            .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 145, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(146, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(94, 94, 94)
            .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(186, Short.MAX_VALUE))
    );

    pack();
}// </editor-fold>

private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {                                            
    String yeniYazi = jTextField1.getText();
    try {
        newclass.adDegistir(yeniYazi);
    } catch (InterruptedException ex) {
        Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
    }

}

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    /* Set the Nimbus look and feel */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {
            new NewJFrame().setVisible(true);
        }
    });
}
// Variables declaration - do not modify                     
private javax.swing.JTextField jTextField1;
// End of variables declaration

}

soruldu: 12 Mar '13, 05:45

ugurcmk's gravatar image

ugurcmk
31225
cevap kabul oranı: 0%

değiştirildi: 14 Mar '13, 06:46

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183

http://docs.oracle.com/javase/tutorial/essential/io/notification.html

WatchService'i kullanmalısın. Yukarıdaki linkte aradığın bilgi mevcut.

(12 Mar '13, 06:08) Turgay Can Turgay%20Can's gravatar image

İlgilendiğiz için teşekkür ederim. Yukarıda da belirttiğim gibi java.nio kütüphanesini kullandığımda sonsuz döngüye giriyor ve dosya ismi resim_1 iken 1 saniyede resim_1500 lere çıkıyor ve ben programı netbeans'den durdurana kadar artmaya devam ediyor. watchservice'ın create olaylarını dinlemesi çok güzel fakat ben dosya ismini değiştirdiğim anda bir olay daha meydana geliyor ve resim+"_"+i gibi bir ifade de i her defasında artması gerektiği için olay döngüsü bir türlü sonlanmıyor. Ben bu kısmı watchservice kullanmadan geçtim fakat bu sefer de jframe donmasında takıldım

(12 Mar '13, 06:17) ugurcmk ugurcmk's gravatar image

Thread kullanımı ile alakalı bir sorun. Arka plandakş Thread uzun süre çalıştığından dolayı arayüz tepki vermez hale geliyordur. İş arası, ufak bir stackover flow yaptım. http://stackoverflow.com/questions/940913/prevent-swing-gui-locking-up-during-a-background-task

lütfen inceleyiniz linki.

(12 Mar '13, 06:25) Turgay Can Turgay%20Can's gravatar image

watchservice ile çok zaman harcadım ama olmadı gönderdiğiniz linke hemen bakıyorum. Zaman ayırdığınız için çok teşekkür ederim.

(12 Mar '13, 06:28) ugurcmk ugurcmk's gravatar image

Sizin yapmak istediğiniz işleme programlama dünyasında "Oberserver Pattern" deniyor (J2EE 'de zaten bu konudan bahsetmiş...). Objserver pattern sisteminde kabaca özetlemek gerekirse bir değişiklik olduğunda "trigger" olan bir programlama sistemi oluyor. Eğer google'da araştırma yapacaksanız da "java observer pattern" diye aratmanız yerine olur.. Bu arada tam sizin durumunuza uyan bir stackoverflow sorusu buldum, çok güzel ve net bir şekilde anlatmışlar:

Normalde sadece Java7 kullanacaksanız J2EE'nin de dediği gibi WatchService kullanmanız gerekiyor, ama Apache IO kütüphanesinde çok daha kolay bir yöntem bulunduğu yazıyor: (Buradaki açıklamalarımın tamamı alıntıdır..)

ApacheIO içerisinde "FileAlterationObserver" class'ı bulunmakta, ve kulalnıcıyı bir dizinde oluşabilecek silme, değiştirme, oluşturma gibi durumlarda haberdar ediyor.

http://stackoverflow.com/questions/14747063/observer-pattern-right-for-file-monitoring

umarım yardımcı olmuşumdur.

permanent link

cevaplandı: 18 Mar '13, 04:26

dreampowder's gravatar image

dreampowder
3.3k112849
cevap kabul oranı: 23%

değiştirildi: 18 Mar '13, 04:31

Teşekkür ederim hemen inceliyorum.

(24 Mar '13, 04:53) ugurcmk ugurcmk's gravatar image

uğur bey inceleyebildiniz mi? bu tarz sitelerde cevap doğrudur diye işaretlemeye veya geri dönüş yapmaya özen gösterelim lütfen.

(28 Mar '13, 15:35) dreampowder dreampowder's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,079
×79

Soruldu: 12 Mar '13, 05:45

Görüntüleme: 1,395 kez

Son güncelleme: 28 Mar '13, 15:35

powered by BitNami OSQA