Java’da Yapılan Uygulamaları Servise Çevirme

Bilgisayarlar çalıştırıldığında otomatik olarak java uygulamamızın çalışması isteniyorsa, Windows işletim sistemleri için programımızı servise çevirmemiz gerekir. Bunun için Internette birden fazla yöntem bulabilirsiniz. Muhtemelen karşılaşacağınız ilk çevirici Java Service Wrapper(JSW) olacaktır. JSW 15 günlük deneme süresi ile bu hizmeti sağlıyor. Biz bunun yerine Yet Another Java Service Wrapper(YAJSW)’ ı kullanacağız. Ücretsiz sürümü gibi düşünülebilir. Servise çevirme işlemi de birbirine benzemektedir.

  • İlk olarak buradan YAJSW’ı indirmeye başlayın.
  • İndirme işlemi tamamlandıktan sonra Java uygulamanızı Windows’ta manuel olarak başlatın. ( cmd ekranında .java uzantılı proje dosyanızın olduğu dizine gelin.

Burada eğer jar dosyanız yoksa;

javac dosya_adi.java ile programınızı derleyin.

java dosya_adi ile programınızı çalıştırabilirsiniz.

Eğer jar dosyanız varsa;

javac –cp jar_dosyasi1.jar; jar_dosyasi2.jar dosya_adi.java ile programınızı derleyin.

java –cp .;jar_dosyasi1.jar;jar_dosyasi2.jar dosya_adi ile programınızı çalıştırabilirsiniz.)

  •  İşlem başladıktan sonra Görev Yöneticisi
  • Ayrıntılar yolunu izleyerek Java uygulamanızın PID (Process ID) not edin. (Windows 8 için)
  • Komut ekranını (cmd) açın ve YAJSW’ın içindeki bat dizinine gelin. Burada “genConfig.bat” dosyasını yanına uygulamamızın Process ID’sini (PID) yazarak çalıştıracağız. Örnek: genConfig.bat 896
    Bu işlem conf dizinimizin altındaki “wrapper.conf” dosyasını düzenlemektedir.
  • Bu dosyada sizinde düzenleyeceğiniz alanlar bulunmaktadır.
    • wrapper.ntservice.name
    • wrapper.ntservice.displayname
    • wrapper.ntservice.description Bu alanları doldurduktan sonra kaydedip çıkın.
  • Başlattığımız uygulamayı artık durdurabiliriz.
  • Servisimizi tamamlamış olduk. Sıra geldi bir hatanın meydana gelip gelmediğini görmeye. Bunun için bat dizininin altındaki “runConsole.bat” dosyasını çalıştırmalıyız. Eğer herhangi bir hata yoksa düzgün bir şekilde başlamalıdır.
  • Eğer hatamız yoksa artık servisi kurabiliriz. Bunun için yine bat dizininin altındaki “installService.bat” dosyasını çalıştırmalıyız.
  • Servisleri kontrol edebilirsiniz. Yaptığımız Windows servisi eklenmiş olması gerekiyor.
  • Servisi ise “startService.bat” dosyası ile başlatabilir, “stopService.bat” dosyası ile durdurabiliriz. Servisi kaldırmak için “uninstallService.bat” dosyasını çalıştırmalıyız.

İçerik Hazırlayan: Muharrem DEMİRAL

Java App-URL girme ve hata kontrolü

Bu applet kullanıcı, bir adresi ve uygulamayı yazabilecektir. Adres hatalıysa düzeltmeye çalışacağız veya hatasını göstereceğiz.

import java.awt.*;
import java.net.*;
import java.applet.*;
import java.awt.event.*;

public class ShowDocumentExample extends Applet implements ActionListener 
{
  TextField urlField;
  Button btn;
  boolean UrlOnError;
  URL kullaniciUrl;
  
  public void init() 
  {
    setLayout(new FlowLayout());
    urlField = new TextField("ornekadres.com");
    btn = new Button("Git!");
    urlField.addActionListener(this);
    btn.addActionListener(this);
    add(urlField);
    add(btn);
  }

  public void paint(Graphics g)
  {
    if (!UrlOnError)   
      g.drawString("URL giriniz ve butona basınız!",20,80);
    
    else 
    {
      g.drawString("Hatalı URL: "+kullaniciUrl,20,80);
      g.drawString("Bu Applet yalnızca .com alanlarına izin verir.",20,100);		
    }
  }

  public void actionPerformed(ActionEvent act) 
  {
    UrlOnError = false;
    String temp = urlField.getText();

    if (temp.length() > 6) 
    {
      if (!temp.substring(0,7).toUpperCase().equals("HTTP://"))
        temp = "Http://" + temp;
    }
    
    else temp = "Http://" + temp;	
    
    if (temp.indexOf(".com") == -1)
      UrlOnError = true;
    
    try 
    {	
      kullaniciUrl = new URL(temp);
    }
    
    catch (Exception e) 
    {
      UrlOnError = true;
    }				
    urlField.setText(kullaniciUrl.toString());
    
    if (!UrlOnError) 
      getAppletContext().showDocument(kullaniciUrl,"_blank");
    repaint();
  }
}

Java App-Thread kullanımı

Geçerli saati göstermek ve her saniyede bir güncellemek istiyoruz.

import java.awt.*;
import java.applet.*;
import java.util.Date;

public class ThreadUygulamasi extends Applet implements Runnable
{
  Thread zamanThread;
  TextField zamanField;
  Date date;
  boolean running = true;
  
  public void init()
  {
    setLayout(new BorderLayout());
    zamanField = new TextField();
    add(zamanField,"Center");
    zamanThread= new Thread(this);
    zamanThread.start();
  }

  public void destroy()
  {
    running = false;
    zamanThread = null;
  }
  
  public void run()
  {
    while (running)
    {
      date = new Date();
      String time = date.getHours()+":"+date.getMinutes()+":"+date.getSeconds();
      zamanField.setText(time);
      try
      {
        zamanThread.sleep(500);
      }
      catch (InterruptedException e)
      {
        System.out.println(e);
      }
    }
  }
}

Java App-Ses Kullanımı

Uygulamalarda ses kullanımıyla ilgili bu örnekte fareyi tıkladığımızda bir ses çalmak için MouseListener kullanacağız.

Bu uygulama için 2 ses dosyasına ihtiyacımız olacak.

import java.applet.*;
import java.awt.event.*;
import java.awt.*;

public class Ses extends Applet implements MouseListener
{
  AudioClip sarki1;
  AudioClip sarki2;
  
  public void init() 
  {
    sarki1 = getAudioClip(getDocumentBase(),"sarki1.au");
    sarki2 = getAudioClip(getDocumentBase(),"sarki2.au");
  
    addMouseListener(this);
    setBackground(Color.yellow);
    sarki2.play();
  }
  
  public void paint(Graphics g) 
  {
    g.drawString("Şarkıyı dinlemek için tıklayınız.",20,20);
  }
  
  public void mouseClicked(MouseEvent evt) 
  {
    sarki1.play();
  }

  public void mousePressed(MouseEvent evt) 
  {
  }
  public void mouseReleased(MouseEvent evt) 
  {
  }
  public void mouseEntered(MouseEvent evt) 
  {
  }
  public void mouseExited(MouseEvent evt) 
  {
  }
}

Java App-Durum mesajları

Bu Applet, durum çubuğu mesajlarını tarayıcınızda gösterir. Üzerinde uygulama yapmak için bir ActionListener kullanacağız.

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class Status extends Applet implements ActionListener
{
  TextField statusField;
  Button statusBtn;
  
  public void init() 
  {
    setLayout(new FlowLayout());
    statusBtn = new Button("Durumu ayarla");
    statusField = new TextField("Buraya yazınız.");
    statusBtn.addActionListener(this);
    statusField.addActionListener(this);
    add(statusBtn);
    add(statusField);
  }
  
  public void actionPerformed(ActionEvent ae) 
  {
    if (ae.getSource() == statusBtn)
      getAppletContext().showStatus(statusField.getText());
    else
      getAppletContext().showStatus(statusField.getText());
  }
}

Java App-MouseMotion Uygulaması

MouseMotionListener, fare bir hotspot üzerinde hareket ettiğinde eylemler gerçekleştirebilmenizi sağlar.  Aynı şeyi MouseListener ve MouseMotionListener’ı aynı anda gerektiren şeyleri sürüklemek için de kullanabilirsiniz.

Bu uygulama, farenin üzerine geldiğinde rengi değiştirecek bir dikdörtgen gösterecektir.

import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class MouseMotion extends Applet implements MouseMotionListener
{
  // Farenin kordinatları
  int xpos;
  int ypos;
  //Dikdörtgenin özellikleri
  int rect1xco,rect1yco,rect1width,rect1height;
  boolean rect1Active;
  
  public void init() 
  {
    rect1xco = 20;
    rect1yco = 20;
    rect1width = 150;
    rect1height = 75;
    addMouseMotionListener(this);
  }
  
  public void paint(Graphics g) 
  {
    if (rect1Active) g.setColor(Color.green);//Dikdörtgen aktifse yeşil
    else g.setColor(Color.red);//değilse kırmızı renkli görünür.
        
    g.fillRect(rect1xco,rect1yco,rect1width,rect1height);
    g.setColor(Color.blue);
    g.drawString("("+xpos+","+ypos+")",xpos,ypos);
  }

  public void mouseMoved(MouseEvent me) 
  {		
    xpos = me.getX();
    ypos = me.getY();
    
    if (xpos > rect1xco && xpos < rect1xco+rect1width && ypos >rect1yco && ypos < rect1yco+rect1height) 
      rect1Active = true;
    else 
      rect1Active = false;
    repaint();
  }
  
  // mouseMoved gibi çalışır, ama yalnızca fare aynı anda basıldığında
  public void mouseDragged(MouseEvent me) {}
}

 

Java App-MouseClick Uygulaması

import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class MouseClick extends Applet implements MouseListener
{
  int xpos;
  int ypos;
  
  int rect1xco,rect1yco,rect1width,rect1height;
  boolean mouseEntered;
  boolean rect1Clicked;
  
  public void init() 
  {
    rect1xco = 20;
    rect1yco = 20;
    rect1width = 100;
    rect1height = 50;
    addMouseListener(this);
  }
  
  public void paint(Graphics g) 
  {
    g.setColor(Color.cyan);
    g.fillRect(rect1xco,rect1yco,rect1width,rect1height);
    g.setColor(Color.magenta);
    g.drawString("("+xpos+","+ypos+")",xpos,ypos);
    
    if (rect1Clicked) 
    {
      g.setColor(Color.blue);
      g.drawString("Dikdörtgeni tıkladınız.",20,100);
    }
    else g.drawString("Dikdörtgenin dışındasınız.",20,100);
    if (mouseEntered) g.drawString("Applet alanının içindesiniz.",20,120);
    else g.drawString("Applet alanının dışındasınız.",20,120);
  }
  
/* Bu metotlar MouseListener'i imlemente ettiğinizde ortaya çıkar.

  public void mouseClicked (MouseEvent me) {}
  public void mouseEntered (MouseEvent me) {}
  public void mousePressed (MouseEvent me) {}
  public void mouseReleased (MouseEvent me) {}	
  public void mouseExited (MouseEvent me) {}	
*/
  public void mouseClicked (MouseEvent me) {
    xpos = me.getX();
    ypos = me.getY();
    
    if (xpos > rect1xco && xpos < rect1xco+rect1width && ypos >rect1yco && ypos < rect1yco+rect1height) 
      rect1Clicked = true;
    else 
      rect1Clicked = false;
    repaint();
  }

  //Fareye basıldıktan sonra çağrılır. Aktif değil
  public void mousePressed (MouseEvent me) {}

  //Fare serbest bırakıldığında çağrılır. Aktif değil
  public void mouseReleased (MouseEvent me) {}	
  
  //Fare uygulamaya girdiğinde çağrılır. Aktif değil
  public void mouseEntered (MouseEvent me) {
    mouseEntered = true;
    repaint();
  }
  
  //Fare uygulamayı terk ettiğinde çağrılır.
  public void mouseExited (MouseEvent me) {
    mouseEntered = false;
    repaint();
  }	
}

 

Java App-Layout Örneği

import java.awt.*;
import java.applet.*;

public class Layout extends Applet 
{
  Button Btn1;
  Button Btn2;
  Button Btn3;
  Button Btn4;
  Button Btn5;

  public void init()
  {
    setLayout(new BorderLayout());
    Btn1 = new Button("Orta");
    Btn2 = new Button("Kuzey");
    Btn3 = new Button("Batı");
    Btn4 = new Button("Doğu");
    Btn5 = new Button("Güney");
    
    add(Btn1,"Center");
    add(Btn2,"North");
    add(Btn3,"West");
    add(Btn4,"East");
    add(Btn5,"South");
  }
}

 

Java App-İlk Applet Uygulaması

import java.applet.*;
import java.awt.*;

//Applet class'ından extend ediyoruz.
public class HelloApplet extends Applet 
{
//Applet başlatıldığında otomatik olarak çağırılan metot
  public void init() 
  {
  }

// Applet sonlandırıldığında bu metot çağrılır.
//Kullanıcı başka bir sayfaya gittiğinde veya tarayıcıdan çıktığında.
  public void stop() 
  {
  }

  public void paint(Graphics g) 
  {
// Ekranda metin çizmek için kullanılan metottur.
// Önce string ifade yazılır, sonra da x ve y koordinatı.
    g.drawString("Hey hey hey",20,20);
    g.drawString("Hellooow World",20,40);
  }
}

 

Java App-Hotspot ve RealMedia Kullanımı

Bu Applet’te 2 kitaplık kullanacağız:
1. HotSpot
2. RealMedia

Aşağıdaki .class dosyalarına ihtiyacımız var:
1. HotSpotListener.class (arabirim)
2. HotSpot.class (bileşen)
3. Loadable.class (arabirim)
4. RealMedia.class (görünmez bileşen)

Ayrıca uygulamada kullanmak üzere 8 gif’e ihtiyacımız olacak. Gif’ler burada yer almamaktadır.

Bu uygulamada 2 buton olacaktır. İlk butonuna basıldığında bir gif görüntülenecek, ikinci butona basıldığında gif ortadan kaldırılacaktır.

import java.awt.*;
import java.applet.*;

// RealMedia için Loadable gereklidir, böylece bu kodun görüntü ve sesi yüklenebilir.
// HotSpotListener, HotSpot'un hotSpotEvent (HotSpot) çağrısında bulunmasına izin vermek için gereklidir.
public class Library extends Applet implements Loadable, HotSpotListener
{
  RealMedia rm;
  HotSpot hs1,hs2;
  int x =1;
  
  public void init()
  {
    setLayout(null);
    setBackground(Color.black);
    rm = new RealMedia(this);
    rm.add("ornek1.gif","ornek1");
    rm.add("ornek2.jpg","ornek2");
    
  // 3 resim ile Başlat butonu
  // Varsayılan durum, mouseOver ve mouseClick durumu.
    rm.add("ornek3.gif");
    rm.add("ornek4.gif");
    rm.add("ornek5.gif");
    
  //Diğer buton
    rm.add("ornek6.gif");
    rm.add("ornek7.gif");
    rm.add("ornek8.gif");
  //resimler yükleniyor
    rm.load();
  }
    
  public void startUp()
  {
  //buton1'i oluştur
    hs1 = new HotSpot(this);
  //Varsayılan resim
    hs1.setImage(rm.get("ornek3.gif"),1);
  //mouseOver resmi
    hs1.setImage(rm.get("ornek4.gif"),2);
  //mouseClick resmi
    hs1.setImage(rm.get("ornek5.gif"),3);
  //Konum ve boyut tanımlama
    hs1.setBounds(20,300,200,200);
    
  // Aynı şekilde buton2 oluşturulur.
    hs2 = new HotSpot(this);
    hs2.setImage(rm.get("ornek6.gif"),1);
    hs2.setImage(rm.get("ornek7.gif"),2);
    hs2.setImage(rm.get("ornek8.gif"),3);
    hs2.setBounds(260,300,200,200);
    
    add(hs1);
    add(hs2);
    hs1.repaint();
    hs2.repaint();
  }
  
  public void paint(Graphics g)
  {
    g.setColor(Color.white);
    
    if (!rm.isLoaded()) 
    {
      g.drawString("loading file "+rm.getCurrent(),20,20);
      g.drawString("of "+rm.getTotalFiles(),20,40);			
      g.drawString("Percent: "+rm.getPercent(),20,60);			
      g.fillRect(20,80,rm.getPercent(),20);			
    }

    else
    {
      if (x == 1)
        g.drawImage(rm.get("ornek1"),80,20,this);
      else
        g.drawImage(rm.get("ornek2"),80,20,this);
    }	
  }
  
  public void hotSpotEvent(HotSpot hs)
  {
    if (hs == hs1)
      x = 1;
    else
      x = 2;
    repaint();	
  }

  public Image loadImage(String file) 
  {
    return getImage(getCodeBase(),file);
  }
  
  public AudioClip loadAudio(String file) 
  {
    return getAudioClip(getDocumentBase(),file);
  }	
}

HotSpotListener.java

import java.awt.*;

interface HotSpotListener 
{
  void hotSpotEvent(HotSpot hs);
}

HotSpot.java

import java.awt.*;
import java.awt.event.*;

public class HotSpot extends Canvas implements MouseListener
{
  private static HotSpotListener hsl;
  private Color fgcolor1,fgcolor2,fgcolor3;
  private Color bgcolor1,bgcolor2,bgcolor3;
  private String mesg1,mesg2,mesg3;
  private Image bgimage1,bgimage2,bgimage3;
  private int width;
  private int height;
  private boolean mouseOver, mousePressed;;
  private boolean enabled;
  private boolean useImages;
  private boolean action;
  private FontMetrics fm;
  private int fontwidth, fontsize;
  private Image buff;
  private Graphics g;
  
  public HotSpot(HotSpotListener hsl)
  {
    bgcolor1 = new Color(0,0,0);
    bgcolor2 = new Color(0,0,0);
    bgcolor3 = new Color(0,0,0);
    fgcolor1 = new Color(0,0,000);
    fgcolor2 = new Color(060,060,060);
    fgcolor3 = new Color(255,255,255);
    mesg1 = "";
    mesg2 = "";
    mesg3 = "";
    setBackground(Color.yellow);
    this.hsl = hsl;
    addMouseListener(this);
  }

  public HotSpot(String mesg1,HotSpotListener hsl)
  {
    this(hsl);
    this.mesg1 = mesg1;
  }

  public void setImage(Image img,int state)
  {
    switch (state)
    {
    case 1 : this.bgimage1 = img; break;
    case 2 : this.bgimage2 = img; break;
    case 3 : this.bgimage3 = img; break;
    default : this.bgimage1 = img;
    }
  }

  public void paint(Graphics g2)
  {
    Dimension dim = getSize();
    if (buff == null)
    {
      buff = createImage(dim.width,dim.height);
      g = buff.getGraphics();
    }

    int bgwidth, bgheight = 0;

    if (mousePressed)
    {
      g.setColor(bgcolor3);
      g.fillRect(0,0,dim.width,dim.height);

      if (bgimage3 != null)
      {
        bgwidth = bgimage3.getWidth(this)/2;
        bgheight = bgimage3.getHeight(this)/2;
        g.drawImage(bgimage3,dim.width/2-bgwidth,dim.height/2-bgheight,this);
      }
    }
    else if (mouseOver)
    {
      g.setColor(bgcolor2);
      g.fillRect(0,0,dim.width,dim.height);
      if (bgimage2 != null)
      {
        bgwidth = bgimage2.getWidth(this)/2;
        bgheight = bgimage2.getHeight(this)/2;
        g.drawImage(bgimage2,dim.width/2-bgwidth,dim.height/2-bgheight,this);
      }
    }
    else
    {
      g.setColor(bgcolor1);
      g.fillRect(0,0,dim.width,dim.height);
      if (bgimage1 != null)
      {
        bgwidth = bgimage1.getWidth(this)/2;
        bgheight = bgimage1.getHeight(this)/2;
        g.drawImage(bgimage1,dim.width/2-bgwidth,dim.height/2-bgheight,this);
      }
    }
    g2.drawImage(buff,0,0,this);
  }

  public void update(Graphics g3)
  {
    paint(g3);
  }	

  public void mouseClicked(MouseEvent me)
  {
    repaint();
  }
  public void mouseReleased(MouseEvent me)
  {
    hsl.hotSpotEvent(this);
    mousePressed = false;
    repaint();
  }
  public void mousePressed(MouseEvent me)
  {
    mousePressed = true;
    repaint();
  }
  public void mouseEntered(MouseEvent me)
  {
    mouseOver =true;
    setCursor(new Cursor(Cursor.HAND_CURSOR));
    repaint();
  }
  public void mouseExited(MouseEvent me)
  {
    mouseOver = false;
    mousePressed = false;
    setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
    repaint();
  }
}

Loadable.java

import java.applet.AudioClip;
import java.awt.*;

public interface Loadable
{
  public Image loadImage(String fileName);
  public AudioClip loadAudio(String fileName);
  public void startUp();
  public void repaint();
  
}

RealMedia.java

import java.util.*;
import java.awt.*;
import java.applet.*;

public class RealMedia extends Component implements Runnable
{
  private Loadable lb;
  private Hashtable htImage, htsound;
  private Stack st1,st2;
  private int delay, size;
  private boolean loadFlag = true;
  private MediaTracker mt;
  private boolean loading;
  private Thread pauseThread;

  public RealMedia(Loadable lb)
  {
    this.lb = lb;
    htImage = new Hashtable();
    htsound = new Hashtable();
    st1 = new Stack();
    st2 = new Stack();
    mt = new MediaTracker(this);
    pauseThread = new Thread(this);
    setDelay(40);	
  }

  public void add(String file)
  {
    st1.push(getMedia(file));
    st2.push(file);
  }

  public void add(String file,String name)
  {
    st1.push(getMedia(file));
    st2.push(name);
  }

  public Image get(String name)
  {	
    return (Image)htImage.get(name);
  }
  
  public void play(String name)
  {		
    AudioClip sound = (AudioClip)htsound.get(name);
    sound.play();
  }
  
  public int getCurrent()
  {
    return size-st1.size();
  }
  
  public int getPercent() 
  {
    return (int)((double)getCurrent()/(double)size*100);
  }
  
  public int getTotalFiles()
  {
    return size;
  }
  
  public void load() 
  {	
    size = st1.size();
    pauseThread.start();
  }
  
  public void setDelay(int delay)
  {
    this.delay = delay;
  }

  public boolean isLoaded()
  {
    return st1.empty();
  }

  private Object getMedia(String file)
  {
    if (isAudio(file)) return new String(file);
    else return lb.loadImage(file);
  }

  private void loadNext()
  {
    if (!st1.empty() && !loading)
    {	
      loading = true;
      mt = new MediaTracker(this);
      Object currentFile = null;
      String currentName = "";
      currentFile = (Object)st1.pop();
      currentName = (String)st2.pop();
            
      if (currentFile instanceof Image)
      {
        mt.addImage((Image)currentFile,0);
        htImage.put(currentName,(Image)currentFile);
      }
      else if (currentFile instanceof String) 
      {
        htsound.put(currentName,lb.loadAudio((String)currentFile));
      }
      try
      {
        mt.waitForAll();
      }
      catch (Exception p)
      {
      }
    }
    loading = false;
  }
  
  public void run() 
  {
    while (!st1.empty()) 
    {
    	loadNext();
    lb.repaint();
    try 
    {
      pauseThread.sleep(delay);
    }
    catch (Exception e)
    {
    }
    }
    lb.startUp();
    pauseThread = null;
    System.out.println("Media Fully Loaded");
  }
    
  private boolean isAudio(String file)
  {
    if (file.endsWith(".au")) return true;
    else return false;
  }
}