Tôi chỉ cố gắng tìm một cách logic dễ dàng để thực hiện chính xác này . Tôi không có. Nó sẽ thực sự tốt đẹp nếu có một Application.getApplicationFor (AppClass.class) quản lý một số đơn cho bạn - nhưng không.
Nếu chúng tôi hạn chế không gian sự cố, điều này khá dễ giải quyết. Nếu chúng tôi làm cho lớp một singleton, thì đó là bánh ... Một mẫu đơn đơn giản sẽ hoạt động tốt:
class MyApp extends Application
{
public static MyApp me;
public MyApp()
{
me=this;
}
...
}
Tôi có thể rỗng nếu chưa được hệ thống khởi tạo. Nó sẽ có thể bảo vệ chống lại điều đó với nhiều mã hơn.
... thực hiện mã ...
Chỉ cần thực hiện điều này - dường như làm việc (trừ đi bất kỳ tình huống luồng lạ) Tôi có một tình huống hơi khác nhau, tôi đang làm treo một màn hình JavaFX vào một swing hiện GUI. Nó hoạt động tốt, nhưng tôi cần đảm bảo rằng Application.launch chỉ được gọi một lần. Thêm yêu cầu này, giải pháp cuối cùng của tôi là như sau:
(Xin lỗi nhưng cú pháp có một số groovy trong nó, nên dễ dàng cho bất kỳ người sử dụng Java để dịch)
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
này quản lý ngăn chặn cho đến khi Application.launch có hoàn thành instantiating lớp, nhận được trường hợp từ các địa điểm khác và đảm bảo rằng Application.launch được gọi chính xác một lần miễn là getInstance đã được gọi ít nhất một lần.
Nguồn
2016-10-13 20:10:36
Bạn đã google? http://docs.oracle.com/javase/8/javafx/api/javafx/application/Application.html – Dici
@Dici Ý của bạn là gì? – user2997204
Mọi thứ bạn cần đều có trong tài liệu. Lớp chính của bạn chỉ cần mở rộng 'Application' và sau đó phương thức chính của bạn sẽ chỉ gọi phương thức' launch'. Trên thực tế, một phương pháp chính thậm chí không cần thiết để chạy một ứng dụng JavaFX – Dici