0

アプリケーションが開始する前にカーソルを砂時計に変更したい Eclipseで「実行」をクリックすると、砂時計が表示されます。私のアプリケーションは、Swing アプリケーションをロードするのに約 4 秒かかり、システム関連のプロパティを取得するのに約 3 秒かかります。使用してsetCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));みましたが、あまり改善されていません

誰でもこの点で助けてもらえますか

これは私のコードです

public static void main(String args[]){

     String os = System.getProperty("os.name").trim().toLowerCase();
       if (!os.equals("windows server 2008 r2") &&
            !os.equals("windows server 2012")) {
        JOptionPane.showMessageDialog(null, TPDI18N.formatWithBundle(
            SsUtils.SS, "ss.error.notSupportedPlatform", os),
            TPDI18N.getString("common.error"), JOptionPane.ERROR_MESSAGE);
        System.exit(0);
       }
   System.setProperty("sun.awt.exception.handler",
        "somepackage");

    ThreadGroup threadGroup = new ThreadGroup("My title") {
        @Override
        public void uncaughtException(Thread t, Throwable e) {
            if (!(e instanceof ThreadDeath)) {
                ErrorUtil.logErrorAndExit(e);
            }
        }
    };

    Runnable r = new Runnable() {
        public void run() {

             startApplication();
        }
    };
    new Thread(threadGroup, r).start();  

}
   private static void startApplication() {
    DirUtil.setAppDir(AppLICATION);
    MyManager.startGUI(new String[0], LOG4J_SS_CONFIG);//Maximum time is consumed at this place
    DirUtil.setHelpTopicDirectory(IMC_HELP_DIR);
    WindowsConfigurator.makeInstance(TPDDirUtil.makeLogDir());
    MyClassManager main = new MyClassManager();
    main.setSize(new Dimension(1000, 720));
    centerWindow(main);
    main.setVisible(true);
    main.setMinimumSize(main.getSize());

}

public MyClassManager() {
    super(TPDI18N.getString(Utils.AA, "aa.title"));
    //here creation of panel takes place
    ---
    --
    }
4

1 に答える 1

3

おそらく問題は、読み込み中のコードが Swing イベント スレッドで実行されているため、カーソルの変更が表示されないことです。解決策は、SwingWorker を使用してバックグラウンド スレッドでコードの読み込みを行い、Swing イベント ディスパッチ スレッドを解放して作業を行うことです。

于 2013-08-02T04:27:39.880 に答える