29 Ekim 2016 Cumartesi

Swing JList Sınıfı

Giriş
Şu satırı dahil ederiz.
import javax.swing.JList;
Liste şeklindeki ekran bileşenidir. Ekranda göstermek için şöyle yaparız.
JList list = ...;
JScrollPane scroll = new JScrollPane (list);
constructor - default
Şöyle yaparız.
JList<String> list = new JList<String>();  
constructor - DefaultListModel
Şöyle yaparız.
DefaultListModel model = new DefaultListModel<String>();
JListString> list = new JList<String>(model);
addListSelectionListener metodu
Şu satırları dahil ederiz.
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
Şöyle yaparız.
list.addListSelectionListener (new ListSelectionListener() {
  public void valueChanged(ListSelectionEvent arg0) { 
    System.out.println("You selected " + list.getSelectedValue());
  }
});
setModel metodu
Şöyle yaparız.
DefaultListModel model = ...;
list.setModel(model);
setPreferredSize metodu
Şöyle yaparız.
list.setPreferredSize (null);



Awt EventQueue Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.awt.EventQueue;
invokeLater metodu
Şöyle yaparız.
EventQueue.invokeLater(new Runnable() {
  public void run() {
  ...
  }
});


27 Ekim 2016 Perşembe

Condition Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.util.concurrent.locks.Condition;
constructor
Şöyle yaparız.
Lock lock = new ReentrantLock();
Condition condition  = lock.newCondition();
await metodu
Şöyle yaparız.
condition.await();
signal metodu
Açıklaması şöyle. Niçin may kelimesi kullanılmış bilmiyorum.
An implementation may (and typically does) require that the current thread hold the lock associated with this Condition when this method is called.
Bekleyen tek bir thread'i uyandırır. Şöyle yaparız.
condition.signal();
signalAll metodu
Bekleyen tüm thread'leri uyandırır.
condition.signalAll();
Consumer
Örnek ver.

Producer
Klasik kullanımı şöyledir.
1. Lock kilitlenir
2. Condition sinyallenir
3. Lock bırakılır
@Override
public void foo (){

  lock.lock();
  try{
    ...
    condition.signalAll();
  } finally{
    lock.unlock();
  }
}


26 Ekim 2016 Çarşamba

Jsoup Sınıfı

text metodu
Html tag'lerini ayıklar. Şöyle yaparız.
String htmlString = "<div class=\"WordSection1\"> <p class=\"MsoNormal\">Hi<br> 
<br> <br> <br> Data is written in this mail.<br> <br> <br> 
<br> <o:p></o:p></p> </div>";

System.out.println(Jsoup.parse(htmlString).text());
Çıktı olarak şunu alırız
Hi Data is written in this mail.

JavaFX FileDialog Sınıfı

Giriş
Swing'teki karşılığı JFileChooser sınıfı.

constructor
Şöyle yaparız.
FileDialog dialog = new FileDialog ((Frame)null, "Select File to Open");
getFile metodu
Şöyle yaparız.
String file = dialog.getFile();
setMode metodu
Şöyle yaparız.
dialog.setMode (FileDialog.LOAD);
setVisible metodu
Şöyle yaparız.
dialog.setVisible(true);




23 Ekim 2016 Pazar

RSAPublicKeySpec Sınıfı

Giriş
Bu sınıf şöyle kullanılır.
RSAPublicKeySpec keySpec = ...;

KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey pubKey = keyFactory.generatePublic(keySpec);
constructor
Şöyle yaparız.
byte[] publicBytes = ...;

BigInteger modulus = new BigInteger(1, publicBytes);
BigInteger publicExponent = BigInteger.valueOf(65537L);

RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, publicExponent);


HttpTimeoutException Sınıfı

Giriş
Hiyerarşisi şöyle
java.lang.Object
 java.lang.Throwable
  java.lang.Exception
   java.io.IOException
    java.net.http.HttpTimeoutException
Açıklaması şöyle
Thrown when a response is not received within a specified time period.



Eşzamanlılık Yapıları

CyclicBarrier
Bu sınıf tüm thread'lerin aynı noktada buluşmasını sağlar.Şu satırı dahil ederiz. Detaylı bir kullanım örneği için buraya bakınız.
import java.util.concurrent.CyclicBarrier;
Bu sınıf ve CountdownLatch çok benziyorlar. Aralarında bazı farklar var. CyclicBarrier daha karmaşık işler için kullanılır.

1. CyclicBarrier sayma işlemi bitince çalıştırmak üzere bir Runnable alabilir.
2. Barrier reset'lenip tekrar kullanılabilir.
3. CyclicBarrier nesnesinin await() metodu farklı thread'ler tarafından çağrılmalıdır. CountdownLatch için countDown() metodu aynı thread tarafından arka arkaya çağrılsa bile sorun olmaz.

constructor
Şöyle yaparız.
CyclicBarrier barrier = new CyclicBarrier(3); 
await
Thread içinde çağrılır. Diğer thread'lerin de aynı satıra gelmesini bekler. Nesnenin isminde cyclic olmasından anlaşılacağı gibi son thread de await'i çağırığ sayaç 0 olduktan sonra otomatik olarak tekrar 3 değerini alır.
barrier.await(); //Barrier automatically resets.
CountdownLatch 
CountdownLatch ve semaphor ilk bakışta iki yapı da birbirlerine benziyor gibi görünüyor ancak farklı işlere yarıyorlar. Semaphore serbest olan kaynakları sayan bir sayaç. CountdownLatch thread'lerin buluşma noktası olarak kullanılıyor. CountdownLatch isminden de anlaşıldığı gibi sadece geriye sayım yapan (tek yönlü) bir sayaç. Örnek:
// First initialize latch with your number of threads
 CountDownLatch latch = new CountDownLatch(N);

 // Then give this instance of latch to each of your threads

 // and finally at your checkpoint do
 latch.countDown();
 latch.await(); 
CountDownLatch basitçe şöyle de gerçekleştirilebilirdi.
Integer threadCount = 10;

for (int i = 0; i < threadCount; i++)
{
    new Thread(() ->
    {
        try
        {
            doFirst();
            synchronized (threadCount)
            {
                threadCount--;
                while (threadCount > 0)
                    threadCount.wait();
                threadCount.notifyAll();
            }
            doSecond();
        }
        catch (Exception e) { e.printStackTrace(); }
    }).start();
}
Semaphore ise hem aşağı hem de yukarı oynayabilen (çift yönlü) bir sayaç.

CountDownLatch vs. Semaphore sorusu da göz atmaya değer.

constructor metodu
Sayacı ilklendirir.
CountDownLatch latch = new CountDownLatch(1);
coundDown metodu
Thread içinde çağrılır. Sayıcın değerini düşürür.
latch.countDown();
await metodu
Sayacın 0 olmasını bekler. Timeout ile kullanılabilirTimeoutException fırlatabilir.
long timeout = ...; TimeUnit unit = ...;
if (!latch.await(timeout, unit))
{
  throw new TimeoutException();
}
...
Timeout olmadan da kullanılabilir.
latch.await(); 
ReentrantLock
ReentrantLock Sınıfı yazısına taşıdım

TimeoutException Sınıfı

Giriş
Hiyerarşisi şöyle
java.lang.Object
 java.lang.Throwable
  java.lang.Exception
   java.util.concurrent.TimeoutException
Açıklaması şöyle
Exception thrown when a blocking operation times out. Blocking operations for which a timeout is specified need a means to indicate that the timeout has occurred. For many such operations it is possible to return a value that indicates timeout; when that is not possible or desirable then TimeoutException should be declared and thrown.