Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.239.87.20] |
|
Сообщ.
#1
,
|
|
|
Написал вот такую программу для примера, чтобы тонны кода не отвлекали от основного вопроса:
Необходимо передать многомерный динамический массив (testImage ) методу saveImage в класс imageIO (его код здесь не приведен). В переменную testImage данные заносятся по нажатию пункта меню <Изображение>. По нажатию <Сохранить> переменная передается методу в другой класс. С реализацией подобного алгоритма с int не возникает проблем (в отличие от массива). Подробнее в комментариях по ходу кода. Помогите понять в какую сторону "копать". Много всего перепробовал но не помогло. Заранее благодарен за любую посильную помощь. import java.awt.Dimension; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; public class imageMain { public static void main(String[] args) { new imageMain(); } imageMain(){ ////////////////////////Оболочка////////////////////////// JFrame frame = new JFrame("Программа обработки изображений"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(null) ; frame.setVisible(true); Font font = new Font("Arial", Font.PLAIN, 12); JMenu fileMenu = new JMenu("Файл"); fileMenu.setFont(font); JMenuItem imgFileItem = new JMenuItem("Изображение"); imgFileItem.setFont(font); fileMenu.add(imgFileItem); final JMenuItem saveItem = new JMenuItem("Сохранить"); saveItem.setFont(font); fileMenu.add(saveItem); saveItem.setEnabled(false); JMenuBar menuBar = new JMenuBar(); menuBar.add(fileMenu); frame.setJMenuBar(menuBar); frame.setPreferredSize(new Dimension(650, 450)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); ////////////////////////Оболочка////////////////////////// final int[][][] testImage = {null};//3D массив (в нем то и загвоздка) final int MAXROWS = 0;//Переменные int - 3 штуки для примера final int MAXCOLS = 0; final int Zamykanie[] = {0}; imgFileItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event){ final int MAXROWS = 100500; System.out.println("Значение MAXROWS: "+MAXROWS); final int MAXCOLS = 101; System.out.println("Значение MAXCOLS: "+MAXCOLS); saveItem.setEnabled(true); System.out.println("Было: Zamykanie = "+Zamykanie[0]); Zamykanie[0] = 22; System.out.println("Задаем: Zamykanie = "+Zamykanie[0]); testImage[0][0][1] = 7; }}); saveItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event){ //Если выполнять последовательно imgFileItem, а затем saveItem, //то, по идее, MAXROWS и MAXCOLS должны существовать, //однако, похоже, их "зачистили" //Слышал, что это называется "замыкание" //"Лечиться" с помощью массива из 1-го элемента: System.out.println("\nА тут уже они не существуют:"); System.out.println("MAXROWS = "+MAXROWS); System.out.println("MAXCOLS = "+MAXCOLS); System.out.println("A с этой все норм: Zamykanie = "+Zamykanie[0]); // Требуется передать в другой класс: imageIO.saveImage(testImage); // Как реализовано выше с Zamykanie (его «читает», но это int а не массив) // Где testImage это int[][][] testImage - трехмерный массив }}); }//body }//imagemain |
Сообщ.
#2
,
|
|
|
Слышал звон, но не знаешь, где он?
final int MAXROWS = 100500; Ты ведь в курсе, чем объявление переменной отличается от изменения значения переменной? |