سؤال

لقد قدمت تطبيقًا وأحتاج إلى حفظ بعض الخيارات قبل الخروج. (شيء مثل البعد النافذة ، ... سيتم كتابته في ملف.)

وضع الإطار الرئيسي هذا:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

كيف يمكنني حفظ الخيارات التي تهمني؟ (قبل الخروج بالطبع)

شكرًا!

هل كانت مفيدة؟

المحلول

إذا كنت ترغب فقط في القيام بشيء ما عند إيقاف تشغيل التطبيق ، يمكنك ربط الإغلاق باستخدام هذا الرمز:

    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {

        public void run() {
            // Do what you want when the application is stopping
        }
    }));

ومع ذلك ، فإن هذا لن يسمح لك بعدم إغلاق نافذتك. إذا كنت بحاجة إلى التحقق من شيء ما قبل الخروج حقًا ، فيمكنك تجاوز windowClosing حدث:

addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
        // Do what you want when the window is closing.
    }
});

لاحظ أن الحل الأول - باستخدام خطاف الإغلاق - له ميزة أنه لا يرتبط بحدث نافذة ، وسيتم تنفيذه حتى إذا تم إيقاف التطبيق بواسطة حدث آخر (باستثناء ، بالطبع ، إذا تم قتل عملية Java بوحشية ).

نصائح أخرى

قد يكون ما يلي سيساعد.

  1. أولاً ، تحتاج إلى قراءة ملف الخاصية الخاص بك. انظر المستند

    Properties properties = new Properties();
    try {
      properties.load(new FileInputStream("filename.properties"));
    } catch (IOException e) {
      System.err.println("Ooops!");
    }
    
  2. إضافة معالج الأحداث الثاني إلى نافذتك ، والتي ستحفظ بياناتك في ملف الخصائص. كل ما تحتاج إلى حفظه فقط في مثيل الخصائص وتخزينه عند الخروج

     addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        try {
         properties.store(new FileOutputStream("filename.properties"), null);
        } catch (IOException e) {
        }
      }
    });
    

هذا كل شيء ، إذا فهمت أنك تصدق)

يمكنك تسجيل أ WindowListener وحفظ خياراتك في طريقة WindowClose.

وبالطبع

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

لست متأكدًا من أن هذا ينطبق على وضعك ، ولكن قد يتصفح الآخرين إلى هذا الموضوع. طلبي يحتوي على Main () وفي النهاية لديه حلقة (! shell.isdisposed). عندما يتم تشغيل التطبيق هذه الحلقة ، وعندما يتم إغلاق التطبيق ، تنتهي هذه الحلقة وتنخفض إلى ما هو عليه في الطريقة الرئيسية. هذا هو المكان الذي وضعت فيه فحصًا إذا كان المحرر متسخًا وإذا كانت التفضيلات قد تغيرت وتتعامل معها مع الظروف. إن طريقتي المرفقة بالملف تغلق القذيفة وتستدعي طريقة CloseCurrent () ، ولكن إذا نقر شخص ما على أيقونة نافذة "X" ، فإنها تقع هنا وأتحقق مرة أخرى إذا كان أي شيء متسخًا وحفظه إذا احتجت إلى ذلك.

while (!shlCpbtool.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
    // exit
    if(dirty){
        closeCurrent();
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top