29 Ekim 2016 Cumartesi

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);



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

LinkedList Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.util.LinkedList;
Sınıf List arayüzünü gerçekleştirir.
import java.util.List;
Bu sınıf ArrayList'e göre daha az kullanılıyor.

constructor
Şöyle yaparız.
LinkedList<Foo>list = new LinkedList<Foo>();
Şöyle yaparız.
Queue<Foo> lits = new LinkedList<Foo>() ;
add metodu
Açıklaması şöyle
public void add(int index, E element)
Inserts the specified element at the specified position in this list. Shifts the element currently at that position (if any) and any subsequent elements to the right (adds one to their indices).
Şöyle yaparız.
list.add (10,foo);
isEmpty metodu
Şöyle yaparız.
if (!list.isEmpty () ){...}
remove metodu
İlk elemanı siler ve döndürür. Şöyle yaparız.
Foo f = list.remove();



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.

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);




24 Ekim 2016 Pazartesi

JAX-RS Response Sınıfı

Giriş
Şu satırı dahil ederiz.
import javax.ws.rs.core.Response;
build metodu
Şöyle yaparız.
Response r = r.build ();
entity metodu
Şöyle yaparız.
String data= "...";
Response r = r.entity (data);
Şöyle yaparız.
return Response.status(200).entity("OK").build();
status metodu
Şöyle yaparız.
Response r = Response.status (200);

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