2012-02-17 26 views
5

maven/Netbeans ứng dụng nền tảng của chúng tôi sử dụng một hình ảnh tùy chỉnh khi khởi động, bằng cách thay thếAnimated Splash Screen trên ứng dụng Netbeans vBulletin

Nbm thương hiệu> core.jar> org.netbeans.core.startup> splash.gif

Tôi đã thử biến nó thành hình động .gif, nhưng chỉ khung đầu tiên được hiển thị.

Làm cách nào để có thể tiến hành triển khai màn hình khởi động động, có thể bằng cách chạy một số hoạt ảnh cửa sổ JavaFX?

Tôi đã xem another other SO question, nhưng nó không thực sự được trả lời - xin lưu ý tôi đang hỏi về cách tích hợp màn hình giật tùy chỉnh với ứng dụng Netbeans Platform của mình và không thực sự xây dựng nó.

Trả lời

2

Đáng ngạc nhiên đủ, tôi đã tìm hiểu cách cắm vào màn hình giật gân tùy chỉnh dựa trên this post about user authentication and authorization.

Về cơ bản, người ta cần phải viết một lớp mới thành lập, thay vì mặc định của nền tảng:

import java.lang.reflect.Method; 

public class CustomStartup { 

    private static final String NB_MAIN_CLASS = "org.netbeans.core.startup.Main"; 

    public static void main(String[] args) throws Exception { 
     // do whatever you need here (e.g. show a custom login form) 
     System.out.println("Hello world! I am a custom startup class"); 
     JWindow splash = initSplash(); 

     // once you're done with that, hand control back to NetBeans 
     ClassLoader classloader = Thread.currentThread().getContextClassLoader(); 
     Class<?> mainClass = Class.forName(NB_MAIN_CLASS, true, classloader); 

     Object mainObject = mainClass.newInstance(); 
     Method mainMethod = mainClass.getDeclaredMethod("main", new Class[]{String[].class}); 
     mainMethod.invoke(mainObject, (Object) args); 

     splash.setVisible(false); 
    } 
} 

Trong lớp đó, người ta có thể tạo ra một sân khấu JavaFX, nhúng nó vào một JWindow, và hiển thị nó:

public JWindow initSplash(){ 
     JWindow window = new JWindow(); 
     final JFXPanel fxPanel = new JFXPanel(); 
     window.add(fxPanel); 
     window.setVisible(true); 
     window.setLocationRelativeTo(null); 

     Platform.runLater(new Runnable() { 

      @Override 
      public void run() { 
       Scene scene = new Scene(new CustomFxSplash(), 475, 300, true); 
       fxPanel.setScene(scene); 
      } 
     } 
     return window; 
} 

những điều khác cần nhớ là:

  • Suppress màn hình khởi động NetBeans gốc bằng cách chạy ứng dụng của bạn với tham số --nosplash.

  • Gọi lớp khởi tạo tùy chỉnh của bạn bằng cách chạy ứng dụng của bạn với -J-Dnetbeans.mainclass=com.package.splash.CustomStartup tham số

  • Khi link suggests lớp tùy chỉnh này phải được trên classpath khởi tạo của nền tảng, có nghĩa là bên trong thư mục platform/core.

1

Phiên bản hiện tại của lớp NetBeans chịu trách nhiệm hiển thị màn hình giật gân có thể xem trực tuyến tại đây: org.netbeans.core.startup.

Mã thủ phạm có thể ngăn chặn các gif từ sinh động là dòng này (dòng 546)

graphics.drawImage(image, 0, 0, null); 

Để cho gif để animate ImageObserver sẽ phải được xác định thay vì được thiết lập để null và sau đó sơn lại phải được gọi khi imageUpdate() được gọi trên số ImageObserver.

Một ví dụ về hiển thị một gif động có thể được xem tại đây: Relationship Between Animated Gif and Image Observer

Vì vậy, như xa như tôi có thể nhìn thấy bạn hoặc sẽ phải thay đổi mã NetBeans nền tảng trên và xây dựng lại nó cho các ứng dụng của bạn hoặc bạn sẽ phải tạo màn hình giật gân của riêng bạn từ đầu để sử dụng thay cho màn hình NetBeans.

Hy vọng bạn thấy điều này hữu ích!

+0

Rất hữu ích! Nếu tôi quyết định xây dựng một màn hình giật gân từ đầu, bất kỳ con trỏ nào về cách chạy nó thay vì bản gốc NetBeans? – Marcelo

+0

Tôi không chắc chắn. Lớp màn hình splash hiện tại là một singleton và nếu chỉ sử dụng mẫu định vị dịch vụ bạn có thể đã tiêm màn hình giật gân của riêng bạn nhưng tiếc là nó không (Có thể cần đăng nhập một yêu cầu tính năng/lỗi NetBeans). Nhưng tôi biết nó có thể vô hiệu hóa màn hình splash mặc định sau đó bạn phải chỉ ra cách thức và thời điểm hiển thị của riêng bạn. – ughzan

Các vấn đề liên quan