2014-12-26 27 views
7

javafx'i kullanırken uygulama örneğini nasıl alabilirim?Uygulama örneği alma javafx

public class LoginForm { 

    public static void main(String[] args) { 
     LoginApplication.launch(LoginApplication.class, args); 
    } 

} 

yöntem fırlatma uygulamasının örneğini döndürmez:

Normalde bir uygulamayı bu şekilde başlatın. Örneği elde etmenin bir yolu var mı?

+0

Bunu Google'a yaptınız mı? http://docs.oracle.com/javase/8/javafx/api/javafx/application/Application.html – Dici

+0

@Dici Ne demek istiyorsun? – user2997204

+0

İ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

cevap

-4

Genellikle javafx uygulama javafx görünümleri için scenebuilder kullanır ve fxml dosyasını erişme hakkında arayacak bir kontrolör sınıfına eşleştirilmiş:

public class Main extends Application { 

    @Override 
    public void start(Stage stage) throws Exception { 
     FXMLLoader myLoader = new FXMLLoader(getClass().getResource("/loginform.fxml")); 
     Parent root = myLoader.load(); 
     Scene scene = new Scene(root); 
     stage.setScene(scene); 
     stage.initStyle(StageStyle.DECORATED); 
     stage.show(); 
    } 

    public static void main(String[] args) { 
     Application.launch(args); 
    } 
} 
+5

Bu soruya nasıl cevap veriyor? – mario

3

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ı.

+0

Normalde, tek bir istemci kullanımıyla ilgili olarak, ancak basit bir istemci uygulaması için, bir kenara konulan istisnai olayları protesto ediyorum. Bu, en azından daha karmaşık çözümlere ihtiyaç duyulana kadar gayet iyi çalışmalıdır. – Neil