2.Ödev

advertisement
Bahar 2008
BMU112 – 2. Ödev
Bu ödevde daha önce başladığımız GPS programına eklemeler yapacaksınız.
Program üç adet sınıftan oluşacaktır: GPSAlicisi.java, GPSCumleİsleyici.java ve GPSViz.java.
GPSAlicisi.java ve GPSCumleİsleyici.java dosyalarını web sayfamızdan indirin. Daha sonra aynı proje
içinde GPSViz.java dosyasını oluşturup aşağıdaki resimlerde görüldüğü gibi görsel dizaynını yapın.
GPSAlicisi.java programı disk üzerindeki bir NMEA dosyasını parametre olarak alır ve saniyede bir satırını
GPSCumleIsleyici.java dosyasındaki LinkList’e ekler. GPSCumleIsleyici programı kendisine gönderilen GPS
cümlelerini parçalar ve gerekli kısımlarını GPSViz programından gönderilen etiketlerin (JLabel) değerlerini
güncellemek için kullanır.
GPSCumleIsleyici.java programı verilen haliyle GGA cümlelerinden Enlem, Boylam ve Zaman bilgilerini
çıkarmaktadır. GGA cümlelerinden almak istediğimiz veriler ve çerçeveye yazdırılma biçimleri şu
şekildedir:
Zaman: 12:35:19
Enlem: 48’ 07.038’’
Boylam: 11’ 31.000’’
(Örnek cümle: $GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47)
Yazacağınız GPSViz.java programı çalıştırıldığında aşağıdaki pencere ortaya çıkmalıdır:
GPS verilerinin bulunduğu dosya seçilip açıldıktan sonra program ikinci tabı otomatik olarak açmalı ve
gelen verileri aşağıdaki gibi göstermelidir:
Galip Aydın
07-04-2008
Page 1
Bahar 2008
BMU112 – 2. Ödev
GPSViz programının kurucu metodunda frame bileşenleri başlatıldıktan sonra GPSCumleIsleyici
Threadine gerekli etiketler parametre olarak geçilmeli ve GPSCumleIsleyici programı başlatılmalıdır.
Java Dosyaları
GPSAlicisi.java
import java.io.File;
import java.util.Scanner;
public class GPSAlicisi extends Thread {
private String dosyaAdresi;
GPSCumleIsleyici cumleIsleyici;
public GPSAlicisi(String dosyaAdr, GPSCumleIsleyici ci) {
cumleIsleyici = ci;
this.dosyaAdresi = dosyaAdr;
}
public void run() {
nmeaDosyaOku(this.dosyaAdresi);
}
public void nmeaDosyaOku(String dosyaAdi) {
try {
String satir = "";
Scanner dosya =
new Scanner(new File(dosyaAdi)).
useDelimiter("\n");
while (dosya.hasNext()) {
satir = dosya.next();
System.out.println("SATIR = " + satir);
if (satir.startsWith("$GP")) {
cumleIsleyici.paketEkle(satir);
} else {
Galip Aydın
07-04-2008
Page 2
Bahar 2008
BMU112 – 2. Ödev
System.err.println("Hatali Satir : " + satir);
}
try {
this.sleep(100);
} catch (Exception e) {
}
}
} catch (Exception e) {
}
}
public static void main(String[] args) {
}
}
GPSCumleIsleyici.java
import
import
import
import
import
java.util.Collections;
java.util.LinkedList;
java.util.List;
java.util.Scanner;
javax.swing.JLabel;
public class GPSCumleIsleyici extends Thread {
private JLabel label1,
private List list;
label2,
label3;
public GPSCumleIsleyici() {
list = Collections.synchronizedList(new LinkedList());
}
public GPSCumleIsleyici(
javax.swing.JLabel l1,
javax.swing.JLabel l2,
javax.swing.JLabel l3) {
list = Collections.synchronizedList(new LinkedList());
label1 = l1;
label2 = l2;
label3 = l3;
}
public void paketEkle(String paket) {
synchronized (list) {
list.add(paket);
list.notifyAll();
}
}
public void paketCikar() {
try {
synchronized (list) {
while (list.isEmpty()) {
list.wait();
}
String paket = (String) list.remove(0);
cumleParcala(paket);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void run() {
while (true) {
paketCikar();
}
Galip Aydın
07-04-2008
Page 3
Bahar 2008
BMU112 – 2. Ödev
}
public void cumleParcala(String cumle) {
if (cumle.startsWith("$GPGGA")) {
String zaman = getKelime(cumle, 1);
zaman = zaman.substring(0,2) + ":" + zaman.substring(2,4) + ":" +
zaman.substring(4,6);
String enlem = getKelime(cumle, 2);
enlem = enlem.substring(0,2) + "' " +
enlem.substring(2) + "''";
String boylam = getKelime(cumle, 4);
if(boylam.startsWith("0"))
boylam = boylam.substring(1,boylam.length());
boylam = boylam.substring(0,2) + "' " + boylam.substring(2) + "''";
System.out.println("Zaman = " + zaman);
System.out.println("Enlem = " + enlem);
System.out.println("Boylam = " + boylam);
label1.setText("Enlem = " + enlem);
label2.setText("Boylam = " + boylam);
label3.setText("Zaman = " + zaman);
//
//
//
}
}
public String getKelime(String cumle, int index) {
Scanner s = new Scanner(cumle).useDelimiter(",");
int sayac = 0;
while (s.hasNext()) {
String kelime = s.next();
if (sayac == index) {
return kelime;
}
sayac++;
}
return null;
}
}
Galip Aydın
07-04-2008
Page 4
Download