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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема области видимости 
:(
    Опции темы
bulat01
Дата 21.10.2011, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



здравствуйте все,

помогите разобраться,

вот фрагмент кода

Код

public class DataCollection2 extends javax.swing.JFrame {
        private JPanel jPanel1;
    private JButton button_cancel;
    private JButton button_next;
    private JButton button_back;
    private JSeparator jSeparator2;
    private JLabel note4;
    private JLabel note2;
    private JLabel note1;


        public String trueCount1;
        public String falseCount1;


public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                DataCollection2 datacoll2 = new DataCollection2();
                //dc2 = datacoll2;
                datacoll2.setLocationRelativeTo(null);
                datacoll2.setVisible(true);
                
            }
        });
    }




public void nextToDataProcessing() throws DfException, IOException {
        DataCollection2.this.setVisible(false);
        
        
        System.out.println("Class DC2: " + registryFileLoc2);
        System.out.println("Class DC2: " + validationFileLoc2);
        System.out.println("Class DC2: " + loadingFileLoc2);
        
        
        DataValidation dv = new DataValidation();
        dv.selectFromPickListItems(session_dc2);
        dv.readValidStatus();
        //dv.getDataCollection2(this);
        
        DataProcessing proc = new DataProcessing();
        proc.getDataCollection2(this);
        proc.getParameters2(check_for_new_doc, rb_new_doc, rb_next_minor_version, rb_next_major_version, check_for_update_attrs);
        proc.getParameters(registryFileLoc2, validationFileLoc2, loadingFileLoc2, clientx3, trueCount1, falseCount1 );
        
        System.out.println("true check from DC2: " + trueCount1);
        System.out.println("false check from DC2: " + falseCount1);

        proc.setLocationRelativeTo(null);
        proc.setVisible(true);
    }

        public void passVariablesValidStat(int trueCount, int falseCount) {
            this.trueCount1 = new Integer(trueCount).toString();
            this.falseCount1 = new Integer(falseCount).toString();
          
            System.out.println("true check from DC2 - passVariablesValidStat method: " + trueCount1);
            System.out.println("false check from DC2 - passVariablesValidStat method: " + falseCount1);
    
    }

}




внутри метода passVariablesValidStat - значения .trueCount1 и falseCount1 видны.
а внутри метода nextToDataProcessing - значения .trueCount1 и falseCount1 показывают null.

Не понимаю почему. Подскажите как решить эту проблему.

PM MAIL   Вверх
Pawl
Дата 21.10.2011, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



может, они и в методе passVariablesValidStat не видны. Попробуй написать в этом методе
System.out.println(this.trueCount1);
System.out.println(this.falseCount1);


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
bulat01
Дата 21.10.2011, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



нет - они в методе passVariablesValidStat видны.



Это сообщение отредактировал(а) bulat01 - 21.10.2011, 16:45
PM MAIL   Вверх
LSD
Дата 21.10.2011, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Данных явно недостаточно. Что делает proc.getDataCollection2(this);? В какой момент вызываются оба этих метода?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
bulat01
Дата 21.10.2011, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



метод nextToDataProcessing (в классе DataCollection2 ) вызывается при нажатии кнопки Next.
этот метод передает определенные параметры (включая параметры из метода passVariablesValidStat ) следующей форме-классу DataProcessing .

метод nextToDataProcessing также запускает метод readValidStatus находящийся в классе DataValidation 
(этот метод вычисляет количество ячеек с TRUE или FALSE - чтение из csv файла а затем передает значения обратно через метод  passVariablesValidStat 
в класс DataCollection2)


Если я где то ошибся - пож-та укажите.
Просто недостаточно знаний и опыта в программировании java.







PM MAIL   Вверх
Pawl
Дата 21.10.2011, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Согласен с LSD.
Ты передаешь куда-то объект класса DataCollection2 методом proc.getDataCollection2(this); в этом где-то может что-то делаться с объектными переменными (в д. с. trueCount1 и falseCount1)... короче,  
Цитата(LSD @  21.10.2011,  16:59 Найти цитируемый пост)
Данных явно недостаточно.




--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
math64
Дата 21.10.2011, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Скорее всего, не учитывется, что в Java параметры, в том числе String, передаются по значению.
Непонятно, зачем счётчики хранить в виде String - это не позволит изменить значения полей.
Чтобы можно было изменять значения счётчиков можно, например определить интерфейс:
Код

public interface IBooleanCounters {
setCounter(boolean b, int cnt);
int getCounter(boolean b);
}

public class DataCollection implements IBooleanCounters {
  private int trueCount;
  private int falseCount;
  public int getCounter(boolean b) { return b ? trueCount : falseCount; }
  public void setCounter(boolean b, int cnt) { if (b) trueCount = cnt; else falseCount = cnt; }
  public void process() {
     DataProcessing proc = new DataProcessing();
     proc.process(this);
  }   
}

public class DataProcessing {
  public void process(IBooleanCounters counters) {
     counters.setCounter(true, counters.getCounter(true) + 1);
     counters.setCounter(false, counters.getCounter(false) + 1);
  }
}

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

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



String – по ссылке. Но он final.
PM   Вверх
math64
Дата 21.10.2011, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Цитата(dobrolub @  21.10.2011,  22:50 Найти цитируемый пост)
String – по ссылке. Но он final.

Нет, всё - по значению. Но для классов передаётся по значению указатель. Через него можно изменить объект, на который он указаывает,
но не сам указатель - после присвоению параметру нового значения он становится обычной локальной переменной.
Кроме String нельзя изменить также объекты типа Boolean, Integer, Double и т.д.


PM   Вверх
dobrolub
Дата 22.10.2011, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

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



Object references are passed by value.

Это сообщение отредактировал(а) dobrolub - 22.10.2011, 00:03
PM   Вверх
ИванИванович
Дата 25.10.2011, 06:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Кроме String нельзя изменить также объекты типа Boolean, Integer, Double и т.д.

Нельзя - это пожалуй слишком сильное слово т.к. если очень хочется изменить, то можно. Но переопределить нельзя. A значит, если proc.getParameters это функция которая пытается инициализиривать  trueCount1 и falseCount1, то у нее ничего не получится smile

Цитата

Object references are passed by value.


Забавно, то что Java  называет references , на самом деле pointers smile
В JLS  они так и пишут:
The reference values (often just references) are pointers to these objects.
Т.е.
Цитата

для классов передаётся по значению указатель

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

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

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


 




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


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

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