Java Exe Çalıştırma
-
Sunucuya java ile yazdığım Console uygulamasını çalıştırıp Belirli saat dilimlerinde iş yaptırmak istiyorum
1 metodumuz olsun Çay getir diyeHer Saat başı java ile yazdığım console uygulamasında çay getir metodunu çağırmak istiyorum bunun için sonsuz döngü kullanıp Thread içersiinde 1 saat uyutmayı düşünüyorum..
Fakat Çay getir metodu bana hata dönderdiğinde bu exe dosyası kill durumuna gelecek yani gümleyecek hali ile. .
Şöyle bir iş olsa Örneğin 50 Personel var 50 personele saat başı çay verilse..
for( ; ; )
{
try{CayGetir();}catch(Exception e ){}
}
Şöyle bir durum olsa örneğin 35. personel işten çıktı yeri boş bana personel yerinde yok hatası dönderdi . daha sonra program kapandı ben kapanmasını engellemek istiyorum. Yani Catch de yakalanan hatanın programı kapatmasını istemiyorum. Bunu nasıl yapabilirim birde bu her saat başı yapma mantığı doğru mudur? Siz ne gibi yol izliyorsunuz JavaScript/PHP/Node.js hakkında bilgim yok :(
Dipnot ; Sunucu Okulumun sunucusu olduğundan bana uzaktan erişim sağlanmıyor yani sunucuya müdahale edemiyorum. webservisi ve Java console uygulamasını hocama vereceğim o sunucuda çalıştıracak ve sadece URL'leri verecek bana. O yüzden hata olduğunda Java uygulamasının kapanmaması gerekiyor çünkü her seferinde hocam açar mısınız uygulamayı demek istemiyorum (SUNUCU WİNDOWS)
-
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { try { IstisnaFirlatacakMetot(); } catch (Exception exception) // istisnayı yutuyoruz { System.out.println("Istisna firlatildi: " + exception); // log'a yazabiliriz } // istisnayı yuttuğumuz için program kırılmayacak } public static void IstisnaFirlatacakMetot() throws java.lang.Exception { throw new java.lang.Exception("Firlatildim."); // bir istisna fırlatıyoruz } }
Artık istisna fırlatıldığında kapanmayacak. Kısaca sizin mantık doğru.
-
YeniHarman bunu yazdı
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { try { IstisnaFirlatacakMetot(); } catch (Exception exception) // istisnayı yutuyoruz { System.out.println("Istisna firlatildi: " + exception); // log'a yazabiliriz } // istisnayı yuttuğumuz için program kırılmayacak } public static void IstisnaFirlatacakMetot() throws java.lang.Exception { throw new java.lang.Exception("Firlatildim."); // bir istisna fırlatıyoruz } }
Artık istisna fırlatıldığında kapanmayacak. Kısaca sizin mantık doğru.
Çok teşekkür ederim hocam dersten sonra hemen deneyeceğim
-
exception' ın temel mantığı zaten programın kapanmasını engellemek değil mi
-
Exception yakaladığında programın kapanmamasını sağlayabilirsin, bunu arkadaşlar belirtmişler zaten.
Periyodik işler yapmak istiyorsan da anahtar kelimeler: cron, crontab, cronjob, ScheduledExecutorService
Bunlara da bakmakta fayda var:
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html
http://stackoverflow.com/questions/7814089/how-to-schedule-a-periodic-task-in-java
http://www.mkyong.com/java/how-to-run-a-task-periodically-in-java/
-
özetle: on error resume next
:)
-
ozgunlu bunu yazdı
exception' ın temel mantığı zaten programın kapanmasını engellemek değil mi
Kesinlikle değil. Amaç programın işleyişinde sıkıntıya yol açacak kısmı bulup gerektiğinde düzgün olarak kapatmak. Hikayeyi okuyun: https://en.wikipedia.org/wiki/Therac-25#Problem_description
Daha açık olarak, belirsiz sonuçlara yol açmadan gerekli önlemleri almak için hata kontrolü yaparız (bir dosyaya veri eklemeden önce dosyanın varlığından haberdar olmak ya da bir işlemin sonucunun sonsuz veya tanımsız olup olmadığını test etmek -0/0, sayı/0 gibi- işlemler). İstisna işleme (exception handling) mekanizması da bu hata kontrolünü kolaylaştırır.
-
YeniHarman bunu yazdıozgunlu bunu yazdı
exception' ın temel mantığı zaten programın kapanmasını engellemek değil mi
Kesinlikle değil. Amaç programın işleyişinde sıkıntıya yol açacak kısmı bulup gerektiğinde düzgün olarak kapatmak. Hikayeyi okuyun: https://en.wikipedia.org/wiki/Therac-25#Problem_description
Daha açık olarak, belirsiz sonuçlara yol açmadan gerekli önlemleri almak için hata kontrolü yaparız (bir dosyaya veri eklemeden önce dosyanın varlığından haberdar olmak ya da bir işlemin sonucunun sonsuz veya tanımsız olup olmadığını test etmek -0/0, sayı/0 gibi- işlemler). İstisna işleme (exception handling) mekanizması da bu hata kontrolünü kolaylaştırır.
Peki ya burdaki diğer amaç da oluşabilecek hatalar sebebiyle programın aniden kapanmasını engellemek değil midir hocam ?
Yani fırlatılan exception' a bağlı olarak programı kapatmak ya da devam ettirmek değil mi olay ?
Ama exception konulmazsa program zaten kapanacak ve burada akışın devam edişi ya da kontrollü bir kapanış da söz konusu olmayacak.
Yanlışsa biraz daha aydınlatabilir misiniz ? Kafamdaki örümcek ağlarından kurtulayım, uzun zamandır böyle biliyordum çünkü. Paylaştığınız yazıyı da uygun vakitte okuyacağım, teşekkürler.
-
ozgunlu bunu yazdıYeniHarman bunu yazdıozgunlu bunu yazdı
exception' ın temel mantığı zaten programın kapanmasını engellemek değil mi
Kesinlikle değil. Amaç programın işleyişinde sıkıntıya yol açacak kısmı bulup gerektiğinde düzgün olarak kapatmak. Hikayeyi okuyun: https://en.wikipedia.org/wiki/Therac-25#Problem_description
Daha açık olarak, belirsiz sonuçlara yol açmadan gerekli önlemleri almak için hata kontrolü yaparız (bir dosyaya veri eklemeden önce dosyanın varlığından haberdar olmak ya da bir işlemin sonucunun sonsuz veya tanımsız olup olmadığını test etmek -0/0, sayı/0 gibi- işlemler). İstisna işleme (exception handling) mekanizması da bu hata kontrolünü kolaylaştırır.
Peki ya burdaki diğer amaç da oluşabilecek hatalar sebebiyle programın aniden kapanmasını engellemek değil midir hocam ?
Yani fırlatılan exception' a bağlı olarak programı kapatmak ya da devam ettirmek değil mi olay ?
Ama exception konulmazsa program zaten kapanacak ve burada akışın devam edişi ya da kontrollü bir kapanış da söz konusu olmayacak.
Yanlışsa biraz daha aydınlatabilir misiniz ? Kafamdaki örümcek ağlarından kurtulayım, uzun zamandır böyle biliyordum çünkü. Paylaştığınız yazıyı da uygun vakitte okuyacağım, teşekkürler.
Şöyle yapalım o zaman:
Bir dosyayı (ya da akışı) yazmak için açtınız. Bu sırada program hata verdi (null pointerla işlem yapmak istediniz ya da aritmetik bir hata). Yazmak istediğiniz dosya (ya da akış) açık kalarak bütünlüğü bozuldu. Bu durumda ne yapacaksınız? Veya Android için uygulama yazıyorsunuz. Kamera kullanımı için gereken izinleri alıp kamerayı kullanmaya başladınız. Uygulama çöktü. Son olarak kamera aidiyeti sizin uygulamada olduğu için başka hiçbir uygulama bu kaynağı kullanamaz.
Hata işlemede esas olan hata çıkarabilecek her bir parçayı kontrol altında tutmak. Örneğin her koşulda (java için ölümcül hata değilse) aldığınız kaynakları finally bloğunda geri vermeniz en doğrusu olacaktır. Belki de çok önemli olmayan hataları günlüklemek istersiniz (x adresine post işleminde bulunuldu fakat karşı taraf cevap vermedi şu tarih-zamanda gibi...). Başka bir örnek verecek olursak: Kullanıcı arayüzünde telefon numarası kısmına karakter giren kullanıcı, programı tekrar başlatmak zorunda kalmamalı. Ölümcül olmayan bir hata. Düzgün şekilde yazdığımız uygulama bu problemle karşılaşıldığında daha sonraki işlemleri yapmayacak (veritabanına kaydetme), kullanıcıyı uyaracak ve gerekirse o hatayı kaydedecektir. Önemli kısım hatalı veri girişinden sonra programın işine kaldığı yerden devam etmemesi (veritabanında telefon numarası Muhittin olan kişi gibi).
Hatanın durumuna göre, uygulamayı düzgün şekilde kapatmak esas olandır diyebiliriz. Hastaya verilecek ilaç miktarını hesaplayan program dozajı 1000000 ml hesaplıyorsa sıkıntı vardır.
X, Y, Z dinamik kaynaklarını uygulama revize ettiyse, sonlanmadan önce doğru şekilde sisteme geri vermelidir. Bunu da sağlamanın kolay yolu istisna işlemeden geçiyor. Zaten ölümcül bir hataysa yapacak bir şey yok. Çökmüştür ve geri dönüşü yoktur.
-
YeniHarman bunu yazdıozgunlu bunu yazdıYeniHarman bunu yazdıozgunlu bunu yazdı
exception' ın temel mantığı zaten programın kapanmasını engellemek değil mi
Kesinlikle değil. Amaç programın işleyişinde sıkıntıya yol açacak kısmı bulup gerektiğinde düzgün olarak kapatmak. Hikayeyi okuyun: https://en.wikipedia.org/wiki/Therac-25#Problem_description
Daha açık olarak, belirsiz sonuçlara yol açmadan gerekli önlemleri almak için hata kontrolü yaparız (bir dosyaya veri eklemeden önce dosyanın varlığından haberdar olmak ya da bir işlemin sonucunun sonsuz veya tanımsız olup olmadığını test etmek -0/0, sayı/0 gibi- işlemler). İstisna işleme (exception handling) mekanizması da bu hata kontrolünü kolaylaştırır.
Peki ya burdaki diğer amaç da oluşabilecek hatalar sebebiyle programın aniden kapanmasını engellemek değil midir hocam ?
Yani fırlatılan exception' a bağlı olarak programı kapatmak ya da devam ettirmek değil mi olay ?
Ama exception konulmazsa program zaten kapanacak ve burada akışın devam edişi ya da kontrollü bir kapanış da söz konusu olmayacak.
Yanlışsa biraz daha aydınlatabilir misiniz ? Kafamdaki örümcek ağlarından kurtulayım, uzun zamandır böyle biliyordum çünkü. Paylaştığınız yazıyı da uygun vakitte okuyacağım, teşekkürler.
Şöyle yapalım o zaman:
Bir dosyayı (ya da akışı) yazmak için açtınız. Bu sırada program hata verdi (null pointerla işlem yapmak istediniz ya da aritmetik bir hata). Yazmak istediğiniz dosya (ya da akış) açık kalarak bütünlüğü bozuldu. Bu durumda ne yapacaksınız? Veya Android için uygulama yazıyorsunuz. Kamera kullanımı için gereken izinleri alıp kamerayı kullanmaya başladınız. Uygulama çöktü. Son olarak kamera aidiyeti sizin uygulamada olduğu için başka hiçbir uygulama bu kaynağı kullanamaz.
Hata işlemede esas olan hata çıkarabilecek her bir parçayı kontrol altında tutmak. Örneğin her koşulda (java için ölümcül hata değilse) aldığınız kaynakları finally bloğunda geri vermeniz en doğrusu olacaktır. Belki de çok önemli olmayan hataları günlüklemek istersiniz (x adresine post işleminde bulunuldu fakat karşı taraf cevap vermedi şu tarih-zamanda gibi...). Başka bir örnek verecek olursak: Kullanıcı arayüzünde telefon numarası kısmına karakter giren kullanıcı, programı tekrar başlatmak zorunda kalmamalı. Ölümcül olmayan bir hata. Düzgün şekilde yazdığımız uygulama bu problemle karşılaşıldığında daha sonraki işlemleri yapmayacak (veritabanına kaydetme), kullanıcıyı uyaracak ve gerekirse o hatayı kaydedecektir. Önemli kısım hatalı veri girişinden sonra programın işine kaldığı yerden devam etmemesi (veritabanında telefon numarası Muhittin olan kişi gibi).
Hatanın durumuna göre, uygulamayı düzgün şekilde kapatmak esas olandır diyebiliriz. Hastaya verilecek ilaç miktarını hesaplayan program dozajı 1000000 ml hesaplıyorsa sıkıntı vardır.
X, Y, Z dinamik kaynaklarını uygulama revize ettiyse, sonlanmadan önce doğru şekilde sisteme geri vermelidir. Bunu da sağlamanın kolay yolu istisna işlemeden geçiyor. Zaten ölümcül bir hataysa yapacak bir şey yok. Çökmüştür ve geri dönüşü yoktur.
çok teşekkürler hocam örneğe bayıldım direk işledi beynime
özellikle finally çok mantıklı gelmiyordu bana, artık geliyor :))
-
@Jpriest hocam Cron Cronjob falan bunların ne anlama geldiğini biliyorum bunlar da Php tabanlı exeler gibi görülüyor yani işerisinde bi işlem var Web tabanlı olduğu için ( Programda hata olmadığı sürece) hep bir takım işlem yapar post get vs vs... Ben Php bilmediğim için .NET C# tabanlı birşeyler yapmam gerekiyordu . Java da bi console uygulaması ile Node.js gibi kod parçacıkları yada script yazmak yerine direk exe dosyasını çalıştırıp sunucu tarafında exe dosyasından post ettirmek istiyorum . Bi web Servisim var aslında bunun güvenliğini kontrol amaclı yapılan birşey . Atılan her postun Tokenler ile kontrolünü Exe dosyasında kontrol edip daha sonra eğer Güvenlik dışı bir işlem yapılıyor ise üyeyi banlamak hesabı öldürmek kapatmak cezalandırmak için buna ihtiyaç duydum. . Kullanıcının O an işlem yapmama olayı vardı buda bana Exception sorun olarak geri dönüyor. ve Thread kill durumuna düşüyor yani main Thread ölüyor . Haliyle benim sonsuz yaşam döngüm de ölmüş oluyor. Tekrar sunucuya girip Exe yi çalıştırmak yerine . Sorunun olduğu halde Veri tabanına Log atarak hatayı fırlatmak istedim açıkcası @YeniHarman abim de güzel bi kod yapısı attı gayet iyi denedim güzel de çalışıyor biraz da kendime göre derledim Life Cycle oldu :)
@ozgunlu hocam sizin dediğiniz şey sanırım hata olduğunda zaten hatayı kullanıcıya göstermek için Try catch bloğuna alıyoruz zaten program kapanmıyor ki diyorsunuz ama thread ölüyor. döngü dışına çıkıyor program kapanmasa bile duruyor yani o anki işlem gidiyor Objective-C olduğu için bir button yardımı ile tekrar başlatabiliriz. Ama Yapılan iş yarım kalıyor veya aksıyor bu şekilde benim amacım herhangi bi sorun halinde o işlemi es geçip bir sonraki işleme geçmek yani durmasın Devam . Go . Go . Go :D