Вопросы по Jave.

Тема в разделе "Java", создана пользователем Dymytry, 19 янв 2010.

  1. Dymytry

    Dymytry Гость

    Товарищи, объясните, пожалуйста, как:

    1)
    есть цикл который что-то делает. как его прервать по нажатию кнопки на форме?
    пока этот цикл что-то делает я не смогу взаимодейстовать с приложением если не работаю с multitreads, так?
    задача такая: надо чтобы кажду минуту оно делало некий запрос, в остальное время хотелось бы чтобы приложение было свободно.

    2) я попробовал разместить две своих таблицы, унаследованных от JTable на форме. Но к величайшему сожалению, оно не работает: вот в таком виде не показываются обе таблицы, хотя по отдельности первая показывалась. Что не так?

    Код (Text):
            JFrame frame = new JFrame("Swing Example Window");
    frame.setSize(500, 500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container contentPane = frame.getContentPane();

    JTabbedPane tabs = new JTabbedPane();
    ATable aTable = new ATable(); // мой класс унаследованный от таблицы. если использовать JTable то то же самое.
    BTable bTable = new BTable();

    JPanel panelAB = new JPanel();

    JScrollPane scrollPaneA = new JScrollPane(aTable);
    JScrollPane scrollPaneB = new JScrollPane(bTable);

    scrollPaneA.add(aTable);
    scrollPaneB.add(bTable);
    panelAB.add(scrollPaneA);
    panelAB.add(scrollPaneB);

    JScrollPane scrollPaneC = new JScrollPane();
    tabs.addTab("A tab", panelAB);
    tabs.addTab("C tab", scrollPaneC);
    contentPane.add(tabs);

    frame.setVisible(true);
    3) Для образования:

    3.1 Зачем нужна библиотека Spring?

    3.2 Часто ли используют Google Web Toolkit? Ведь как я понял он генерит код автоматом, а это не очень хорошо.

    3.3 Делают ли вообще сайты на JSP. Если да, то в чем их плюсы?

    3.4 При резком изменении размеров моих окон, созданных на Jave, я замечаю что границы окна как бы двоятся, дергаются, иногда проступает черный фон на который с задержкой наезжают мои Controls. Короче, медленно прорисовывает, хотя сама программа не тормозит. У меня DualCore 3ГБ, хотя и с плохой видеокартой, но на native окнах такого нет. Это что?
     
  2. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Ну тут полюбому надо делать отдельный поток. В потоке будет цикл, в теле которого осуществляется запрос и засыпание на минуту. Для реализации возможности остановки цикла, в твоем классе, расширяющем Thread, можно завести некое поле, которое в цикле будет проверяться. Как только оно устанавливается в определенное значение, цикл останавливается. Будет типа такого (за абсолютную точность не ручаюсь, явой давно не пользовался):
    Код (Text):
    public class TheThread extends Thread {
    private volatile bool isStopRequested = false;

    public void run() {
    // если isStopRequested выставится в true, поток завершится
    while(!this.isStopRequested) {
    ... // сделать какой-то запрос
    wait(60000); // спим минуту
    }
    }

    public void requestStop() {
    this.isStopRequested = true;
    }
    }
    Сдается мне, проблема в том, что обе таблицы ты кладешь на одну панель, не устанавливая layout-менеджера, в результате чего одна таблица просто перекрывает вторую. Установи менеджер, и все должно быть ОК. Пример:
    Код (Text):
    ...
    panelAB.setLayout(new BorderLayout());
    panelAB.add(scrollPaneA, BorderLayout.NORTH);
    panelAB.add(scrollPaneB, BorderLayout.CENTER);
    Главным образом, для создания трех(и более)звенных клиент-серверных приложений. Сами авторы предлагают Spring в качестве альтернативы J2EE. Это если по-простому.

    Делают. Насчет плюсов - смотря в сравнении с чем.

    Увы, оконная подсистема Java даже на мощных машинах работает не моментально; такова плата за кроссплатформенность.
     
  3. Dymytry

    Dymytry Гость

    LuMee, спасибо!

    Имелось ввиду - в чем плюсы и минусы JSP по сравнению с ASP, PHP, Perl и другими технологиями для создания сайтов.

    Еще вот возник вопрос - какой редактор GUI лучше использовать для Eclipse? Посмотрел их родной Visual Editor и даже не понял что скачивать с сайта.. В NetBeans это удобнее.

    А почему больше не пишете на Jave, нашлась более интересная альтернатива?
     
  4. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Про ASP "просто" говорить не имеет смысла: эта технология, можно сказать, отмерла. Если брать ASP.NET, то эта штука находится примерно в той же категории, что и JSP (только заточена исключительно под Windows).
    Если сравнивать JSP и PHP, то обычно отмечается следующее:
    - РНР, как правило, предпочтителен для небольших и среднекалиберных проектов: он прост в освоении, дешев (имеются в виду затраты на разработчиков, хостинг и т.п.), позволяет быстрее создавать приложения с несложной логикой.
    - JSP, в свою очередь, будучи частью платформы J2EE, лучше себя ведет при больших нагрузках, позволяет более эффективно разрабатывать крупные сложные проекты (позволяя, опять же, задействовать другие Java-фреймворки, вроде Spring, EJB, JSF и т.п.).
    Понятное дело, что такое разделение: Java - для крупных задач, РНР - для задач помельче, - довольно грубое, в реальности выбор в пользу той или иной технологии может зависеть от многих других факторов.

    Дело даже не и в интересности. Просто в тот момент, когда искал себе работу, вакансий по Java в моем городе не нашлось, а вот по .NET нашлась; им сейчас и занимаюсь. Хотя, если однажды начальство решит перебросить меня на Java-проект, то я совершенно не расстроюсь :)
     
  5. Dymytry

    Dymytry Гость

    Появились еще вопросы, посоветуйте плиз!

    1) Был шокирован Java Date классом. Оказалось, что
    Код (Text):
          Calendar calendar = Calendar.getInstance();
    calendar.set(2010, 0, 27, 10, 0, 0);
    Date date = calendar.getTime();
    System.out.println(date.getTime());
    будет при каждом запуске кода выдавать РАЗНЫЕ даты в миллисекундах. Как такое вообще может быть?
    Встает вопрос: у меня две даты, одну я делаю сам через calendar.set, а вторую считываю из текста через formatter.parse. И вот, разумеется, дата из форматтера не имеет на конце этих миллисекунд, а дата которую ставлю сам - имеет. В результате равные даты - не равны! Что тут сделать можно? Как вообще правильно сравнивать даты в Jave?

    2) У меня есть соединение с COM интерфейсом сторонней программы через JAWIN. Вот код:
    Код (Text):
        MyConnection()
    {      
    try{
    Ole32.CoInitialize();
    app = new DispatchPtr("MyApplication");          
    }
    catch (Exception e) {
    e.printStackTrace();
    }              
    }

    protected void finalize() throws Throwable {

    try {          
    Ole32.CoUninitialize();        
    } catch(Exception e) {         
    }      
    finally {          
    super.finalize();
    //more code can be written here as per need of application         
    }

    }
    Скажите:
    а. правильно ли я использовал функцию finalize или лучше как-то по другому
    б. я хочу при ошибке инициализации что-то сообщать своей программе - "все ок" или "не получилось". как это обычно делают? ведь конструктор ничего не возвращает...

    3) я обычно делаю каждый класс в отдельном файле. это хороший тон?
     
  6. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Первое, что приходит в голову - убрать миллисекунды:
    Код (Text):
    calendar.set(Calendar.MILLISECOND, 0);
    calendar.set(2010, 0, 27, 10, 0, 0);
    Ну а потом уже можно сравнивать.

    Вроде нормально. Вот тут, по крайней мере, такой подход и рекомендуется.

    ИМХО, правильнее будет убрать try..catch из конструктора. Тогда вызывающий код по выборшенным исключениям поймет, что инициализация не удалась. Можно еще в catch-блоке выбрасывать исключение какого-то своего типа, чтобы положить в него все желаемые сведения.

    Да, в общем случае так и следует делать.
     
  7. Dymytry

    Dymytry Гость

    Спасибо!
     
  8. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    правильно не использовать finalize вообще и освобождать ресурсы явно, так как время вызова finalize недетерминированно и, да и, вообще не гарантируется.
     
  9. Dymytry

    Dymytry Гость

    Kmet, то есть надо удалять объект через Object = null?
     
  10. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    как бы в яве явно удалять объекты не надо. когда на объект не останется ссылок он будет удален сборщиком мусора. finalize же просто способ отловить этот момент, что-то вроде суррогата деструктора из языков без сборщика мусора. но сборщик мусора заботится только об объектах, все остальные ресурсы (файлы, сокеты, соединения с бд и т.д) необходимо освобождать явно и это не стоит делать в методе finalize (почему смотри выше)
     
  11. Dymytry

    Dymytry Гость

    Набежала еще порция вопросов, ничего что я тут спрашиваю?.. :)

    1) у меня есть общая задача: генератор отчетов под веб который использует drag'n'drop interface для кастомизации отчета и далее с исп. ajax этот отчет получает. у меня информация хранится в Lotus Domino, но мне интересно узнать какими средствами решали бы эту задачу java-разработчики, если бы она хранилась где угодно (oracle например), а веб-сервер был бы другой. поэтому я спрашиваю тут. какие пути я могу предположить:
    - интерфейс на каком-нибудь javascript framework и далее Lotus Agent. здесь все понятно, это моя тема.
    - Google Web Toolkit + lotus agent. GWT тут вообще к месту? вроде как он призван упростить работу с ajax и веб-интерфейсами.
    - есть волшебные слова типа XML, SOAP, Web Services.. я в этом не разбираюсь. Это может как-то помочь?
    - одной из проблем которую мне предстоит решить является сортировка данных, поступающих из разных источников. возможно, если все данные идут как XML можно использовать какие-нибудь (?) библиотеки Java для работы с XML, которые смогут этот объединенный набор XML тэгов отсортировать по одному из полей. есть ли какое-то стандартное решение для таких задач, какое-то направление?
    или же, если требуется вывести под веб таблицу из БД обычно ее сначала формируют и потом целиком выводят?

    2) Java itself:
    - странное поведение стандартного FileChooser диалога: после выбора там директории начинается работа моего кода по выгрузке в ту директорию файлов, но сам FileChooser закрывается где-то посреди этого процесса в произвольный момент (хотя я делал ему SetVisible=false). Может быть, у него отдельная нить и ей не хватает ресурсов для закрытия сразу же? Как мне это исправить?
    - правильно ли я понял, что в стандартном наборе Java классов нет DateTimePicker? Что обычно используете вы?
    - допустим у меня есть внутренний класс. как мне из него получить объект того класса, внутри которого он находится? То есть то, что обычно внутри класса вызывается через this?

    3) есть ли хорошие Java библиотеки для сохранения данных в форматах Excel, Pdf? Обычно, когда мне надо было создать свой Excel файл я просто печатал Excel XML SpreadSheet или лез в Excel через OLE. Возможно, java-разработчики используют какое-то стандартное решение этой задачи и не надо уже искать как там Excel зовет какой-то цвет ячейки или как добавить автофильтр....
     
  12. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    по п.3) [post="152182"]отсюда есть ссылки[/post], если не видели...
     
  13. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    если нужно решить общую задачу генератор отчетов, то нужно и взять готовый генератор отчетов. например http://jasperforge.org/projects/jasperreports. Тут и генерация и в pdf, и в excel, и еще в кучу форматов. И поддержка различный источников данных и многое другое.

    к месту, упрощает, но уровень входа достаточно высок.

    может. все поддерживается из коробки

    XML + XSLT. поддерживается из коробки.

    data warehouse и тд

    не понятно

    https://swingx.dev.java.net/
     
  14. Dymytry

    Dymytry Гость

    Спасибо.

    Что за коробка?

    Имеется ввиду слабое управление форматом генерируемого кода?

    JFileChooser:

    Есть код выгрузки аттачментов из базы. Он спрашивает директорию куда это надо сделать.
    Код (Text):
                            JFrame frame = new JFrame("File detach utility");
    frame.setLocationRelativeTo(null);
    frame.setSize(500, 500);

    JFileChooser file_chooser = new JFileChooser("Select folder to store attachments:");
    file_chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    chooser_action = file_chooser.showOpenDialog(frame);

    if (chooser_action == JFileChooser.APPROVE_OPTION) {           
    runDetach = true;          
    }
    file_chooser.setVisible(false);


    if (runDetach)
    {                                  

    //detach all files
    }
    И все хорошо, но сама форма выбора директории (file_chooser) закрывается почему-то где-то в середине выгрузки файлов, а не сразу, хотя явно задан setVisible(false). Вот я и думаю - это из-за нехватки ресурсов? Что можно сделать? Как-то остановить (wait) текущую нить что ли.. но file_chooser вроде как в той же нити.. непонятно.
     
  15. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    вот тут тоже не понял
    для Non-static nested classes (inner classes) так
    Код (Text):
    public class Outer {
    public class Inner {
    Inner() {
    Outer outer = Outer.this;
    }
    }
    }
    Excel = http://poi.apache.org/
    pdf = http://java-source.net/open-source/pdf-libraries

    из коробки - это значит поддерживается в jse, без необходимости использовать сторонние библиотеки
     
  16. Dymytry

    Dymytry Гость

    1) Собираюсь сделать следующее: объединить XML из нескольких источников в один XML, применить к нему XSLT преобразование с целью сортировки и исключения ненужных элементов, далее можно преобразовать в HTML. Это возможно? Это разумный путь?
    Если да, то какие именно библиотеки Java мне помогут в этом: я встречал следующие слова: SAX, DOM, JAXP, STAX, что-то из Apache.. Что нужно для решения моей задачи (и вообще для начала в данной области), что мейнстрим сейчас?

    2)
    - или же, если требуется вывести под веб таблицу из БД обычно ее сначала формируют и потом целиком выводят?
    - вот тут тоже не понял
    - мне интересно как обычно решается задача объединения данных из разных источников в один сортированный результат. например, есть таблицы из разных БД, или таблицы+виды Лотуса или еще что-то разнородное. обычно стремятся поместить все в одно место или можно использовать что-то типа того что я написал в п 1) ?
     
  17. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    как один из вариантов - разумный. но многое зависит от данный, их количества и необходимых преобразований над ними. обработка xml достаточно требовательна к ресурсам.

    JAXP - это просто общее названией технологий относящихся к XML в сановской реализации.
    SAX, DOM, STAX - различные подходы к разбору XML. В вашем случае берите DOM, так XSLT решения в конечном счете работают имено с DOM моделями.

    поразному решается, нету одного правильно решениея. зависит от данных и от операций над ними. Если у нас есть несколько источников, отдающих небольшие XML, которые нужно объеденить, применить к ним простенькие сортировки и фильтрации, то XSLT здесь весьма к месту. Но если данных много, и выборки по ним нужно делать сложные - то лучше складывать данные в БД или DataWarehouse и работать уже с ним.

    Стоит еще посмотреть XQuery (XQJ), он как раз таки и позволяет выбирать/объеденять данные из разный источников. Решение очень мощное, но еще молодое.
     
  18. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.079
    Симпатии:
    300
  19. Dymytry

    Dymytry Гость

    С прошедшими, Java People!

    Набежало у меня вопросов из серии "как лучше"..

    1) есть ли что-то простое по поиску внутри вектора по одной из его составляющих?
    2) у меня часто встречаются одинаковые циклы с разным содержанием. можено ли как-то формализовать такую задачу? то есть написать некую функцию или что-то этакое чтобы "запомнить" мой цикл?
    3) у меня классическая задача: нужно хранить где-то совокупность String, int, long, что-то еще. на данный момент я создаю класс с такими внутренними переменными, и далее пихаю объекты этого класса в Vector. но тут проблема: нужны разные векторы и их надо как-то различать. получается, надо создавать еще один класс для хранения Vector & Vector identifier.
    Пример того о чем спрашиваю:

    есть объект проект. в нем поля String, int, etc
    набор проектов принадлежит человеку.
    у каждого человека есть имя.

    я для хранения такой структуры буду вынужден создать класс Человек{Имя, Vector Проекты} и Проект {String, int}
    Можно ли сделать это как-то проще?
    Мне в реальности объект Человек не нужен, а нужно просто разделять последовательности проектов по неким их именам. Другими словами, я хотел бы взять объект Vector и присвоить ему имя :welcome:
    Есть какие стандартные решения таких задач, или я все делаю единственным возможным способом?

    4) наплодил тут source файлов. в каждом - по public классу. но сама по себе эта публичность мне абсолютно не нужна, все только в пределах моего package. и вот я второй раз задумался - а правильно ли я делаю что каждый класс помещаю в отдельный файл?
    5) у меня есть несколько объектов одного типа. например - несколько Threads которые делают разную работу, несколько обработчиков разных входных данных итд. тут кажется разумным применить наследование от abstract класса. с другой стороны можно создать один класс и внутри по входящему типу делать switch. а можно вместо наследования использовать внутренние классы внутри одного общего с общими полями. есть тут какие-то общие рекомендации?
    6) пока не понимаю философию exceptions в java. вот есть код:

    Код (Text):
    void parserFunction(String str1, String str2)
    {
    String[] myarray = str1.split("\\|");
    Date mydate = myformatter.parse(str2);

    //занести myarray & mydate куда-то

    }
    он парсит строку. понятно что если туда передать пустую строку или строку без даты - оно выдаст Exception. Вот я и думаю: как по науке мне стоит обрабатывать эти ситуации? То ли писать if-else, то ли ставить try-catch..
    нужно ли вообще проверять такие вещи как null, пустые строки итд если есть try-catch? вот я поместил все что есть внутри моей функции в try-catch и сижу спокойно.
     
  20. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    для работы с колекциями следует использовать Java Collections Framework. Vector, Hashtable и т.д. с некоторой натяжкой можно считать устаревшими
    можно. почему нет?
    если колекция отсортированая то можно использовать http://java.sun.com/j2se/1.4.2/docs/api/ja....lang.Object%29

    если имя уникально, то можно использовать Map<String, List<Проект>>
    правильно, если нужно ограничить область видимости класса пакетом, то достаточно убрать public.
    общие рекомендации: полиморфизм лучше чем switch/if, композиция лучше чем наследование
    передать исключение вызывающему коду.
    нужно, чем рашьше узнаешь что данные не правильны, тем лучше.
     
Загрузка...

Поделиться этой страницей