الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

استدعاء طريقة في كلاس من خلال حدث زر في كلاس اخر

مغلق
بدأه medgh82 في 18 مايو 2005 · 5 رد · 850 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

الأخوة رواد المنتدى عفوا على ازعاجكم وطرحي الكثير للاسئلة

ولكن ارجوا الاجابة على اسئلتي اذا امكن وانا شاكر لتعاونكم المسبق

على العموم سؤالي او مشكلتي كالتالي :

1- عندي كلاس فيه مجموعة من الطرق كما هو بالكود التالي :

public class SearcherVO {
    public void ext(String tmp)throws Exception{
       MainJFrame frmm = new MainJFrame(); 
       indexer indx = new indexer();
       File indexDir = new File("F:\\Med Project\\Tutorial\\LuceneTutorial\\IndexDir");
       File dataDir = new File("F:\\Med Project\\Tutorial\\LuceneTutorial\\DataIndex");
       indx.index(indexDir, dataDir);
     
       if (!indexDir.exists() || !indexDir.isDirectory()) {
            throw new Exception(indexDir + " is does not exist or is not a directory.");
        }

        search(indexDir,tmp);
     }

    public static void search(File indexDir, String q)  throws Exception{
    Directory fsDir = FSDirectory.getDirectory(indexDir, false);
    IndexSearcher is = new IndexSearcher(fsDir);

    Query query = QueryParser.parse(q, "contents", new StandardAnalyzer());
    Hits hits = is.search(query);
    System.out.println("Found " + hits.length() + " document(s) that matched query '" + q + "':");
    for (int i = 0; i < hits.length(); i++) {
        Document doc = hits.doc(i);
        System.out.println(doc.get("filename"));

    }
}

}

2- عندي كلاس اخر وهي من نوع فريم وفيها مجموعة من العناصر ومنها العنصر رز (بوتون) اريد عندما اضغط على هذا الزر يكون الحدث هو تنفيذ طريقة موجودة في الكلاس اعلاه والطريقة هي exc(String tmp); وكود هذه الكلاس كما هو التالي والسطر الذي يطلع فيه الخطاء مظلل باللون الاحمر

public class MainJFrame extends javax.swing.JFrame {
    SearcherVO sh = new SearcherVO();
    public int flag;

    public MainJFrame() {
        initComponents();
    }
    
    private void initComponents() {
        listResult = new java.awt.List();
        buttonSearch = new java.awt.Button();
        textFieldSearch = new java.awt.TextField();
        jLabelDet = new javax.swing.JLabel();

        getContentPane().setLayout(null);

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("VO Search Engine");
        setFocusCycleRoot(false);
        setFont(new java.awt.Font("AGA Arabesque", 0, 10));
        setName("frame");
        setResizable(false);
        getContentPane().add(listResult);
        listResult.setBounds(40, 120, 370, 80);

        buttonSearch.setActionCommand("buttonSearch");
        buttonSearch.setLabel("Search");
        buttonSearch.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buttonSearchActionPerformed(evt);
            }
        });

        getContentPane().add(buttonSearch);
        buttonSearch.setBounds(160, 50, 140, 30);

        getContentPane().add(textFieldSearch);
        textFieldSearch.setBounds(70, 20, 310, 20);

        jLabelDet.setFont(new java.awt.Font("Dialog", 0, 12));
        jLabelDet.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabelDet.setText("Empty");
        jLabelDet.setBorder(new javax.swing.border.TitledBorder(null, "Details", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0, 12)));
        jLabelDet.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        getContentPane().add(jLabelDet);
        jLabelDet.setBounds(40, 220, 370, 210);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-465)/2, (screenSize.height-488)/2, 465, 488);
    }
    public String getSearchText (){
        return textFieldSearch.getText();
    }
    

                
    private void buttonSearchActionPerformed(java.awt.event.ActionEvent evt) {                                             
       
        sh.ext(getSearchText());
        setFlag(2);
        listResult.add(getSearchText());
                
    }                                            
    
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MainJFrame().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify                     
    private java.awt.Button buttonSearch;
    private javax.swing.JLabel jLabelDet;
    private java.awt.List listResult;
    private java.awt.TextField textFieldSearch;
    // End of variables declaration                   
    
}

3- الخطا اللي يظهر لي زي مافهمت انه الطريقة التي استدعيها من الكلاس الاول لها Exception وانه المفروض المكان اللي تستدعى فيه يكون فيه Exception

ولكن انا استخدم محرر NetBeans والمكان اللي استدعت فيه هو buttonSearchActionPerformed ولم استطع اضاقة اي Exception كأنه محمي او غير قابل للتعديل

ارجوا انه يكون سؤالي واضح وعفوا على طول السؤال واذا في اي احد عنده طريق او فكرة اخرى عن كيفية استطاعتي ان استدعي طريقة معينه موجودة في كلاس عندما اضغط على زر في كلاس اخر ارجو الافادة

مع خالص شكري واحترامي

#2

الأمر exc قد ينتج خطأ من نوع Exception (طبعا أنت من كتبت هذا) . طبعا هذا أمر خطير، ولهذا كان على من ينادي الأمر exc إما أن يكون مسؤولا أم غير مسؤول.

أن يكون مسؤولا: يعني أنه قادر على التصرف لو طرأ هذا النوع من الخطأ. بأن تعمل الآتي:

try{ // بمعنى جرب الأوامر الخطرة هذه ...
sh.exc(); // هذا الأمر قد يرمي الخطأ Exception 
} // انتهت التجربة.
catch(Exception e){ // لو طرأ الخطأ نفذ الأوامر التالية لأني أنا أتحمل المسؤولية كاملة!!
e.printStackTrace(); // اطبع الخطأ مثلا 
JOptionPane.showMessageDialog(this, "File Not Found"); // نبه المستخدم.
//افعل شيئا آخر.
}

إذا كنت لا تريد أن تتحمل المسؤولية وتريد أن تلقي السؤولية على ما ناداك. فاصنع هذا:

private void buttonSearchActionPerformed(java.awt.event.ActionEvent evt) throws Exception{ // هذا يعني أن من ينادي هذا الأمر عليه أن يتحمل المسؤولية. طبعا هذا الأمر بالخصوص لا تنفع هذه الحركة لأن من يناديه لن يتحمل المسؤولية وهكذا..

ملاحظات:

1- تعلم البرمجة شيئية التوجه وأنت تكتب برنامجك. إذا كنت لن تصمم بهذه الطريقة، VB سيكون أفضل لك.

2- إذا كان لديك وقتا فحاول عمل برنامجك بدون واجهات رسومية. أو اصنع برامجا بتكوين فئات تستخدم فيها البرمجة شيئية التوجه.

2- يفترض أن ترمي الأخطاء المعبرة: استخدم FileNotFoundException بدلا من Exception.

#3

اعضاء المنتدى الافاضل ارجوا الاجابة على سؤالي

#4

شكرا يااخ ابو مازن ساجرب ماقلت وارد لك ماهي النتيجة

#5

الاخوة الاعزاء

بعد عمل كومبيلر للبرنامج لم تظهر اي اخطاء ولكن عند تنفيذ البرنامج ظهر لي الخطا التالي

java.lang.StackOverflowError

ماهي المشكلة

ارجو المساعدة

#6

في المرة القادمة حاول طباعة الخطأ كاملا هنا، فهو يدلك على مكان الخطأ.

حاول مسح الأمر هذا

public void ext(String tmp)throws Exception{
//      MainJFrame frmm = new MainJFrame();

بصراحة برنامجك يحتاج إلى ترتيب.

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…