24 Aralık 2010 Cuma

Wndows 7'de AHCI Mod

Hard diskiniz BIOS'ta IDE modda iken Windows 7'yi kurup daha sonra AHCI moda geçirdiğinizde Windows'unuz açılmayacaktır. Windows'un repair özelliği bu problemi giderebilir. Ama, repair'de bu problemi giderememişse aşağıdaki adımları izleyerek hard diskinizi AHCI moda geçirebilirsiniz.

Ben problem yaşamadım ama aşağıdaki işlemleri yapmadan önce sisteminizi yedeklemenizi tavsiye ederim.

  •  BIOS'ta disk modunu IDE yapıp bilgisayarınızı açınız.
  • Registry editör'ü (regedit) açınız.
  • HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlset / Services / msahci dizinini açınız.
  • start değişkenine çift tıklayarak açınız. 3 olan değerini 0 yapınız.
  • Registry editör'ü kapatınız.
  • Bilgisayarınız yeniden başlatıp BIOS'a giriniz.
  • Hard disk modunu AHCI yapıp, BIOS ayarlarınızı kaydedip bilgisayarınızı yeniden başlatınız.
  • Windows açıldığında AHCI sürücüleri yükleyip yeniden başlatmak isteyecektir.
Bu işlemler Windows Vista için de geçerlidir.

16 Aralık 2010 Perşembe

Headless Ortamlarda Toolkit Kullanımı

Ekran, klavye veya fare'siz ortamlarda grafik arayüz kodları içeren bir Java uygulaması çalıştırırsanız HeadlessException alabilirsiniz. Linux/UNIX bir sunucuya telnet/ssh ile bağlandığınızda, uygulamanız sistem servisi olarak çalıştığında ve benzeri durumlarda bu hata ortaya çıkar.

Java'nin 1.4 versiyonundan itibaren bu durum için Headless mode desteği vardır. Uygulamanızı Headless mode'da çalıştırdığınızda sistem, Toolkit olarak HeadlessToolkit kullanır ve uygulamanızın ihtiyaç duyduğu bazı kaynakları ve parametreleri sağlar.
Uygulamanızın Headless mode'da başlaması için uygulamanızı -Djava.awt.headless=true parametresi ile çalıştırmalısınız. Panel, Canvas gibi bileşenler ve Swing bileşenleri Headless mode'da kullanabilirsiniz, ama JFrame, JDialog gibi en üst seviye container'ları kullanamazsınız.
Headless mode ile ilgili ayrıntılı bilgiye aşağıdaki bağlantıdan erişebilirsiniz.

http://java.sun.com/developer/technicalArticles/J2SE/Desktop/headless/

HeadlessToolkit'in sağladıkları sizin için yeterli olmayabilir. Örneğin Toolkit'in getScreenResolution, createCustomCursor metodlarına ihtiyacınız var. Bu gibi durumlarda aşağıdaki gibi bir Toolkit tanımlamalısınız.



public class CustomToolkit extends HeadlessToolkit {

    public CustomToolkit() {
        super(createSystemToolkit());
    }

    private static Toolkit createSystemToolkit() {
        String osName = System.getProperty("os.name");
        String toolkitClass = osName.startsWith("Windows") ? "sun.awt.windows.WToolkit" : "sun.awt.X11.XToolkit";
        try {
            Class<?> clazz = Class.forName(toolkitClass);
            Object toolkitInstance = clazz.newInstance();
            return (Toolkit)toolkitInstance;
        }
        catch (Exception exc) {
            throw new RuntimeException(exc);
        }
    }

    @Override
    public int getScreenResolution() throws HeadlessException {
        return 72;
    }

    @Override
    public Insets getScreenInsets(GraphicsConfiguration graphicsConfiguration) throws HeadlessException {
        return new Insets(0, 0, 30, 0);
    }

    @Override
    public Cursor createCustomCursor(Image image, Point point, String s)
            throws IndexOutOfBoundsException, HeadlessException {
        return Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR);
    }

}

createSystemToolkit metodunda işletim sistemine göre Toolkit döndürüyoruz. Reflection kullanmamızın sebebi Windows'taki JRE'lerde XToolkit'in, Linux'teki JRE'lerde WToolkit'in bulunmaması.

Bunun gibi problem yaşadığınız Toolkit metodlarını ezebilirsiniz.

Toolkit'imizin etkin olabilmesi için uygulamanızı aşağıdaki parametrelerle çalıştırmalısınız.
-Djava.awt.headless=false
-Dawt.toolkit=CustomToolkit

20 Ekim 2010 Çarşamba

Yahoo Gazetteer

Gazetteer, Coğrafi Bilgi Sistemleri ile ilgili bir kavram. Gazetteer, yerleşim yerleri hakkında çeşitli bilgiler sağlar. En azından bu yerleşim yerinin adı ve coğrafi olarak koordinatlarını verir. Bunun yanında nüfus, dağlar, yollar, gelir düzeyi gibi bilgilerde içerebilir.

Yahoo'nun gazetteer servisi var. Aşağıdaki adresten ulaşılabilir. Bu servise, yazdığınız bir uygulamadan erişebileceğinize gibi adresi doğrudan internet gezginine yazarak ta erişebilirsiniz.

http://local.yahooapis.com/MapsService/V1/geocode?appid=UYGULAMA_ADI&location=KONUM

Örneğin NASA'nın World Wind Java API'si ile Ankara'nın bilgisini almak istediğimizde URL aşağıdaki gibi olacaktır.

http://local.yahooapis.com/MapsService/V1/geocode?appid=nasaworldwind&location=ankara

Yahoo'nun gazetteer servisi isim, konum, şehir ve ülke bilgilerini veriyor.

30 Eylül 2010 Perşembe

Herhangi Bir Sınıfa Listener Desteği Sağlamak

Başka sınıfların bizim sınıfımıza ActionListener olarak kaydolmalarını ve sınıfımızın iç işleyişi sırasında bir durum oluştuğunda actionPerformed olayını atmak istiyoruz. Bunun için sınıfımızda yapmamız gereken tanımlamalar aşağıdaki gibidir.

public class XYZ {
    private ActionListener listenerList;

    .....
    .....
    // diğer sınıflar bu metot aracılığıyla bizim sınıfımızda oluşan olaya kayıt yaptırabilir.
    public void addActionListener(ActionListener listener) {
        if (listener == null) {
            return;
        }
        listenerList = AWTEventMulticaster.add(listenerList, listener);
    }

    // diğer sınıflar bizde gerçekleşen olaylardan artık haberdar olmak istemiyorsa bu metodu kullanmalıdır.
    public void removeActionListener(ActionListener listener) {
        if (listener == null) {
            return;
        }
        listenerList = AWTEventMulticaster.remove(listenerList, listener);
    }
   
    // sınıfımızda oluşan durumda olay atmak için bu metodu kullanacağız.
    private void fireActionEvent() {
        ActionListener listener = listenerList;
        if (listener != null) {
            // burada isterseniz başka source, id ve command parametreleri geçebilirsiniz.
            ActionEvent event = new ActionEvent(this, 0, null);
            listener.actionPerformed(event);
        }
    }

    .....
    .....
        // beklenilen durum gerçekleşti, olay atalım.
        fireActionEvent();
    .....
    .....

}

Input/Output Stream ve Reader/Writer'lar ile Çalışmak

Input/Output Stream (aynı durum Reader/Writer'lar için de geçerlidir.) değişkeni try/finally bloğundan önce tanımlanmalı, try bloğu içinde oluşturulmalı ve finally bloğu içinde kapatılmalı (close). Catch bloğu tanımlanmamış olsa dahi finally bloğu tanımlanıp bu işlemler yapılmalıdır.


Örnek:


InputStream is = null;
try {
    is = new FileInputStream(inputFileName);
    is.....
    .......
    .......
}
finally {
    if (is != null) {
        try {
            is.close();
        }
        catch (Exception exc) {
            // logla
        }
}

15 Ocak 2010 Cuma

Windows Servisleri Arasında Bağımlılık Tanımlama

Start -> Run çalıştırılıp, açılan diyalogda regedit yazılarak Windows'un registry düzenleyicisinin açılması sağlanır.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services yolu takip edilerek servisler listelenir.
Bağımlılık tanımlanacak servis altındaki DependOnService isimli Multi String tipinde key tanımlanır (eğer yoksa).
Bu key'in değeri olarak bağımlı olacağı herbir servis adı yazılır. Servis isimlerinin herbiri ayrı bir satırda yazılmalıdır. registry düzenleyisi kapatılıp Windows yeniden başlatılır.