Sadece tam olarak bunu yapmak için kolay bir mantıksal yol bulmaya çalışıyordu . Ben yapmadım. Sizin için bazı singletonları yöneten bir Application.getApplicationFor (AppClass.class) olsaydı gerçekten güzel olurdu ama hayır.
Sorun alanını kısıtlarsak çözülmesi oldukça kolaydır. Biz sınıf a tek yaparsanız, o zaman kek ... Bir basitleştirilmiş tekil desen sorunsuz çalışır: Henüz sistem tarafından örneklerle desteklendi olmadıysa
class MyApp extends Application
{
public static MyApp me;
public MyApp()
{
me=this;
}
...
}
beni boş olabilir. Daha fazla kodla buna karşı korunmak mümkün olabilirdi. kodunu uygulama
... ...
Sadece bu uygulamaya - Ben biraz daha farklı bir durum, ben varolan salıncak içine JavaFX ekrana wedging ediyorum var (herhangi bir garip parçacığı durumları engelleme) iş gibi görünüyor GUI. İyi çalışıyor, ancak Application.launch'ın sadece bir kez çağrıldığından emin olmalıyım.
(Üzgünüm ama sözdizimi herhangi bir Java kullanıcı çevirmek için içine biraz şahane, kolay olmalı sahiptir)
class MyClass extends Application{
private static MyClass instance
public MyClass() {
instance=this
}
public synchronized static getInstance() {
if(!instance) {
Thread.start {
// Have to run in a thread because launch doesn't return
Application.launch(MyClass.class)
}
while(!instance)
Thread.sleep(100)
}
return instance
...
} // class
Bu Application.launch olana kadar engelleme yönetir: Bu gereksinimi ekleme, benim son çözüm bu nedenle olduğunu sınıfın örneklenmesi tamamlandı, diğer konumlardan örnekler alındı ve Application.launch uygulamasının, getInstance en az bir kez çağrıldığında tam olarak bir kez çağrılmasını sağladı.
Bunu Google'a yaptınız mı? http://docs.oracle.com/javase/8/javafx/api/javafx/application/Application.html – Dici
@Dici Ne demek istiyorsun? – user2997204
İhtiyacınız olan her şey dokümanda. Ana sınıfınız sadece 'Uygulamayı' genişletmeli ve ardından ana yönteminiz sadece 'başlat' yöntemini çağırır. Aslında, bir JavaFX uygulamasının çalıştırılması için bir ana yöntem bile gerekli değildir. – Dici