2013-06-06 29 views
6

Uygulamamın ana() bölümünde verileri yedeklemek için aşağıdaki kodu kullanıyorum, böylece sistem kapatıldığında kaybolmaz. Benim IDE içinde Stop düğmesine basın veya log (kod aşağıda gösterilen) asla konsola herhangi günlükleri veritabanına verileri kaydetmek veya yazma gibi görünüyor aracılığıyla girdi itimat edip AncakJava Kapatma işlevi çalışmıyor

//add hook to trigger Production Shutdown sequence 
    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { 
     public void run() { 
      Production.shutdown(); 
     } 
    })); 

.

ctx.deploy(server); 

    server.start(); 

    //start the production process 
    Production.init(); 

    System.in.read(); 
    server.stop(); 

Bu kapatma işlevi nasıl yürütülüyor?

+1

Bir sistem kapatıldığında sistem.exit işlevini çağıran bir kod var mı? Herhangi bir sorun bulmakta güçlük çekiyorsanız, çıkış girişimlerini günlüğe kaydeden bir güvenlik yöneticisi yükleyebilirsiniz. –

+0

Neden bunun yerine main() 'ın sonunda shutdown() yapmıyorsunuz? – fge

+0

@fge Ana sayfanın yanında birden fazla iş parçacığı olabilir. Varsa, diğer iş parçacıkları başka şeyler yaparken, program kapanır ve sorunlara neden olur. – gparyani

cevap

11

Daha fazla ayrıntı için Exit düğmesini değil Stop, see my answer here düğmesini kullanmanız gerekir.

Bu özelliğin şu anda yalnızca Çalıştır modunda, Debug'da değil olduğunu unutmayın.

+1

Ve öyle görünüyor ki, fikir 14 üzerinde çalışmaz ( –

+1

Sadece bugün stop butonu durdurulan stop butonunu buldum. Şahsen ben çok kötü bir karar olduğunu düşünüyorum, her zaman Stop butonunun Ctrl + C'yi simüle ettiğini düşündüm (bu SIXINT unix'tir) ve sonra Exit butonu olmadan debug var. PID ('jps' yardımcı olabilir), bilmeden süreci öldürmeye çalışabilir, doğru? Yanlış ... Windows kullanarak ve' taskkill' sürecini kullanarak normal şekilde durdurulamaz - sadece zorla ('taskkill/f/pid x') - Görünüşe göre IDE bir şekilde “koruyor” (hem hata ayıklamada hem de normal çalışmada) Bu, kapatma kancalarını daha kolay test etmiyor, hata ayıklama sadece imkansız. – virgo47