IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   JAVA JAVA JAVA (http://www.imho.ws/showthread.php?t=111440)

sealmu 20.11.2006 23:29

JAVA JAVA JAVA
 
Как в java определить(специфицировать) метод класса в package чтобы при наследовании класса он сохранялся но не был виден из другого класса в данном package, в отличии от protected?

/7y3uK 21.11.2006 01:22

модификатор public - класс видно из всего приложения
package local (default) - инстанс класса можно создать только в данном пакадже
модификатор protected - видно только наследникам
модификатор private - видно только внутри класса

то что ты хочешь сделать - можно добиться грамотным распределением классов по пакетам, больше никак... т.е. кладешь в самый глубокий пакадж классы с пакадж локал доступом, а наследников кладешь в пакадж уровнем выше... вложенность только в глубину работает

alexksei 22.11.2006 00:52

Напишу в эту темя, тоже появе...


Короче проблемма такая.... в одном классе создан инт массив, этот же массив нужен и в другом классе, но когда я к нему обращаюсь, топишется java.lang.NullPointerException

Вообшем структура кода примерно такая -

public class first
{
public static int [][]massiv;
public static void main(String[] args)
{
int[][] massiv = new int[count][2];
//zapolnjajetsja massiv
}
}

class second
{
public void
{
System.out.println(first.massiv[0][0]);
}
}

ЕЖ 22.11.2006 01:56

alexksei
А где создание объекта класса first? Или, раз у тебя в нем все сделано как static, то как минимум где вызов метода main, создающего (выделяющего память под) этот массив? Если нигде нет, то очень даже правильно ругается на NullPointerException.

alexksei 22.11.2006 02:23

Нету ни обьекта класса first, ни вызова метода майн....

А как это делается ? ... Ну если не сложно, обьясни как сделать и первое и второе :help:

Сразу еще один вопрос - у меня есть куча комбобоксов, текстфилдов и одна кнопка, при нажатии на которую должно считываться содержимое всех комбобоксов и текстфилдов.... Вообшем я в состоянии сделать только считывание с конкреного обьекта на котором произвелось действие...

class guiexampleFrame extends JFrame implements ActionListener {
guiexampleFrame()
{
JComboBox maakond = new JComboBox(maakonds);
maakond.addActionListener(this);
buttonpanel.add(sorteerimine);
buttonpanel.add(maakond);
buttonpanel.add(otstarve);
buttonpanel.add(veekogu);
buttonpanel.add(textfield1);
buttonpanel.add(textfield2);
}
public void actionPerformed(ActionEvent e)
{
JComboBox cb = (JComboBox)e.getSource();
selectedItems[0]= (String)maakond.getSelectedItem();
System.out.print(selectedItems[0]);
}

ЕЖ 22.11.2006 02:28

Раз по какой-то причине ты объявил в первом классе все как static, то создавать объект класса first не надо, но память под массив надо выделить - это у тебя делается в методе main. Только не понятно что у тебя там за count.

Вызов метода main - это просто first.main(...). Но только опять же, судя по аргументам метода main класса first можно судить что это метод у тебя должен вызываться сразу при запуске программы, и массив у тебя должен сразу создаться. Тогда где вообще у тебя создается объект класса second чтобы пользовать массив в классе first?

Это у тебя полный текст программы? Что ты хочешь осуществить и чем руководствовался, когда писал ту путаницу, что привел здесь?

alexksei 22.11.2006 02:41

Вложений: 1
НУ ессно текст не полный далеко, просто текст программы слишком большой и там много лишнего, не относящегося к проблеме....я просто общую структуру изобразил, чтоб было понятно откуда и куда следует массив...

main -запускается сразу, webcontent считывает файл(каунт - колво строк нужных, которые буду в массиве), они забиваются в массив, далее guiexamplFrame создает все кнопки и так далее, и exampleCanvas класс - его назначение нарисовать график по числам из массива....

Вообшемто программа выглядить даже чуть подругому, может это както прояснит ситуацию -

public class first
{
public static int [][]massiv;
public static void main(String[] args)
{ ....
webcontent();
.....
JFrame frame = new guiexampleFrame();
....
}
webcontertnt{
.....
int[][] massiv = new int[count][2];
...
//zapolnjajetsja massiv}
}
}

class guiexampleFrame extends JFrame implements ActionListener {
....
guiexampleFrame() {
.......
drawpanel = new examplecanvas();}}


class examplecanvas extends Canvas {
....
public void paint(Graphics g) {
{.....
System.out.println(first.massiv[0][0]);
}
}


Вот.. более подробная схема, может поможет пролить свет....Если надо, то могу прислать полную версию программы....Ну очень надо мне её закончить....


Прикрепил код, там сильная каша, много всяких ненужных переменных и прочего, не обращайте внимания )) Главное - помогите :help:

EvroStandart 22.11.2006 13:01

Попробуй сделать другой пример без всего лишнего. Так проще заставить работать. А потом можно сравнивать с большим кодом.

HotSpot 22.11.2006 18:59

alexksei:public static int [][]massiv;

попробуй убрать static, а к массиву обращаться по ссылке на него (передать через параметр)

alexksei 22.11.2006 19:14

Цитата:

Сообщение от hd
alexksei:public static int [][]massiv;

попробуй убрать static, а к массиву обращаться по ссылке на него (передать через параметр)


Нет, так тоже не получится, обращение к тому классу идет еще из другого класса.... Вообшем эту проблемму решил, воспользовался аррейлистами, не знаю почему, но с ними такой проблеммы не было....


Проблеммы с actionlistener так и осталась.... не могу сделать так чтобы при нажатии на кнопку считывалось все что введено в остальных комбобоксах и текстфилдах :mad:

ЕЖ 23.11.2006 01:01

alexksei
У тебя вообще какая-то ерунда написана в коде. В классе guiexampleFrame ты описываешь свои сомбобоксы и текстфилды как _члены_ класса.
Код:

    JTextField textfield1, textfield2, textfield3;
    JComboBox maakond,otstarve,veekogu,sorteerimine;

Затем почему то не создаешь эти объекты, а создаешь другие с теми же именами, но как локальные переменные метода main
Код:

        JComboBox maakond  = new JComboBox(maakonds);
        JComboBox otstarve  = new JComboBox(otstarved);
        JComboBox veekogu  = new JComboBox(veekogud);
        JComboBox sorteerimine  = new JComboBox(sorteerimised);

Ты их уже объявил как члены класса, тебе надо их просто создать.

Потом, раз они будут членами класса, то и доступны они будут в любом методе этого класса. В том числе в обработчике события actionPerformed(ActionEvent e). И тебе не надо пататься вытащить их из аргумента события
Код:

(JComboBox)e.getSource()
тем более что там Source вероятнее всего будет не JComboBox, а JButton. Нужно просто тупо написать что-то типа
Код:

        selectedItems[0]= (String)maakond.getSelectedItem();
        selectedItems[1]= (String)otstarve.getSelectedItem();
        ...

для всех нужных тебе комбобоксов и текстфилдов, объявленных в твоем классе, и созданных в main.

alexksei 23.11.2006 01:53

ЕЖ, ОГРОМНОЕ спасибо, еслибы ты знал сколько я времени убил на это, топтался на одном месте :mad: .... Значит и с массивом была таже проблемма, я его обьявлял там, а создавал другой с тем названием просто =))

ТОлько как создать массив то правильно чтоб он был именно то ?

Я делал так -
public static int [][]allMassiv; - в классе

int [][]allMassiv = new int[count+1][2]; - это уже в майн, когда нашел каунт... но видимо создается другой массив с такимже названием опятьже....

ЕЖ 23.11.2006 02:15

Раз у тебя одна размерность константная, то напиши что-то типа
Код:

class myClass
{
    static int [][] myArray = new int[2][];

    public static void main(String[] args)
    {
      myArray[0] = new int[count];
      myArray[1] = new int[count];
    }
}



Часовой пояс GMT +4, время: 05:24.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.