Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> non-static и static context 
:(
    Опции темы
brejnev
Дата 19.9.2005, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 18.9.2005

Репутация: нет
Всего: нет



Только начал изучать Java, возник вопрос. Есть исходник
Код


import java.sql.*;
import java.io.*;
import java.util.*;

public class MainDlg extends javax.swing.JFrame {
    public MainDlg() {
        initComponents();
    }
  
    private void initComponents() { /*...*/ } /*создание gui, код сгенерен NetBeans */

    
    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MainDlg().setVisible(true);
                execSQL();        
           }              
      });
    }

    public void execSQL()

    {
        try{
            Connection conn = getConnection();
            Statement stat = conn.createStatement();
           
            ResultSet res = stat.executeQuery("SELECT * FROM Publisher");         
            res.first();
            
            while( res.next() ){
                jComboBox1.addItem( res.getString("Name") );           // вот здесь ошибка       
            }
         
            res.close();
                        
            stat.close();
            conn.close();
            
        }
        catch( SQLException e ){ 
            while( e!=null ){
                e.printStackTrace(  );
                e=e.getNextException();
            }
        }
        catch( IOException e ){
            e.printStackTrace();
        }
    }

    public static Connection getConnection( ) 
        throws SQLException, IOException 
    {/*...*/ }
 
    /*private члены*/     
    ...
    private JComboBox jComboBox1;          
    ...
}


на строке jComboBox1.addItem( res.getString("Name") ) компилятор ругается "non-static method execSQL() cannot be referenced from a static context" - как это обойти?
PM MAIL   Вверх
allex
Дата 19.9.2005, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 5.9.2005

Репутация: нет
Всего: нет



Ругается компилятор не на эту строку, а на вызов execSQL() из main(). Необходимо указать объект, для которого вызывается метод.

Код

MainDlg dlg = new MainDlg();
dlg.setVisible(true);
dlg.execSQL();    



Это сообщение отредактировал(а) allex - 19.9.2005, 17:55
PM MAIL   Вверх
brejnev
Дата 19.9.2005, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 18.9.2005

Репутация: нет
Всего: нет



Решил проблему, код генерит NetBeans и по-этому я решил не трогать, то что он там натворил. Код
Код

   public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
               new MainDlg().setVisible(true);
        }
        });
        MainDlg.execSQL();    
    }

так же не работает. Если execSQL расписать, то ошибку компилятор покажет на строке, с jComboBox. Я просто вынес execSQL() в конструктор
Код

    public MainDlg() {
        initComponents();
        execSQL(); 
    }

Работает, только первую строку sql-запроса не пропускает, но это я уж сам разберусь smile
А в общем, ничего плохого, что execSQL() оказалось в конструкторе?

PM MAIL   Вверх
batigoal
Дата 19.9.2005, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(brejnev @ 19.9.2005, 19:13)
А в общем, ничего плохого, что execSQL() оказалось в конструкторе?

Особо, наверное, ничего, но по смыслу нехорошо...

А вообще, советую код руками полностью писать, особенно поначалу. Полезнее.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
bars_uz
Дата 21.9.2005, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 26.3.2005
Где: Tashkent

Репутация: нет
Всего: нет



Ya toje rekomenduyu prisat ruchnuyu...
A to esli v dolneyshem budete pisat sereoznie proekti u Vas mogut voznika bolshie problemi..
PM MAIL ICQ   Вверх
Macross
Дата 26.9.2005, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.9.2005

Репутация: нет
Всего: нет



В документации написано, что static методы могут обращаться только к static методам.
В статик методе сначала нужно создать объект а затем обращаться к его методам.
Это должно работать:
Код

public static void main(String args[]) {    
        java.awt.EventQueue.invokeLater(new Runnable() {    
            public void run() {    
               new MainDlg() md=new MainDlg();
               md.setVisible(true);    
               md.execSQL();
        }    
        });            
    }

А по поводу того, что net bins сам сгенерировал код и лутше его не трогать скожу так - создал, то он его создал, но вот изменять то не запретил, в отличии от метода initComponents(). Это к тому, что всех нюансов генератор кода предусмотреть не может и править код вполне можно и даже нужно. Генератором нужно пользоваться для сокращения рутинной работы а с кодом вы сами вольны делать, что хотите, главное понимать, что вы делаете smile .

Для ярых поклоников генераторов можно попробывать execSQl() сделать static возможно еще понадобиться и все переменные и методы используемые в execSQL() также сделать static, но это уже в сторону извращений.

Это сообщение отредактировал(а) Lamer George - 26.9.2005, 14:48
PM MAIL   Вверх
batigoal
Дата 26.9.2005, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Macross - пожалуйста, пользуйся кнопкой "Код" - так нагляднее.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0484 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.