Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

Зависимость Swing приложения от наличия БД.как такое возможн
Список форумов
 ->  Swing, AWT & SWT


На страницу 1, 2  След. 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
den4082 : 74
Новичок

СообщениеМар 03, 2010 21:31 
Ответить с цитатой
Пишу Swing приложение для работы с бд MuSQL,но не пойму почему если нету базы определенной то и сама программа не запускается,я думал интерфейс никак не связан с базой,он должен просто тогда выдавать пустую таблицу без данных
К началу Посмотреть профиль Отправить личное сообщение
masyan : 920
Supreme moderator

СообщениеМар 03, 2010 22:44 
Ответить с цитатой
включаю хрустальный шар...

наверно потому что у вас все в куче и бд и создание гуи. И когда выскакивает Exception, то программа переходит сразу в блок catch минуя создание гуи. Дикое предположение, но все же.
А вообще сделайте printStackTarce, че там пишется. И код сюда выложите.
К началу Посмотреть профиль Отправить личное сообщение
demon_zx : 1567
Завсегдатай
Откуда: Moscow

СообщениеМар 03, 2010 22:45 
Ответить с цитатой
swing не зависит от базы, наверное просто ошибка подключения к базе прерывает дальнеейшее формирование интерфейса, так что смотрите внимательней логику вашего приложения
К началу Посмотреть профиль Отправить личное сообщение
almagnit : 938
Модератор
Откуда: Луганск

СообщениеМар 04, 2010 19:34 
Ответить с цитатой
Если программа нуждается в БД, а ее нет, то логично предложить пользователю ее создать или ...
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
den4082 : 74
Новичок

СообщениеМар 04, 2010 19:56 
Ответить с цитатой
masyan писал(а):
включаю хрустальный шар...

наверно потому что у вас все в куче и бд и создание гуи. И когда выскакивает Exception, то программа переходит сразу в блок catch минуя создание гуи. Дикое предположение, но все же.
А вообще сделайте printStackTarce, че там пишется. И код сюда выложите.


Код:
/* Импорт классов
 * и пакетов */
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Event;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.KeyStroke;

/** Объявляем класс, где слово "public" значит что этот класс открыт или доступен для других классов,начало класса отмечается служебным словом "class",за которым следует имя класса,выбираемое произвольно,в данном случае это имя "Kapplication", "extends JFrame" значит что наш класс унаследован от класса "JFrame"
 *
 * @ Version 1.0 12 февраля 2010
 * @Author Агарков Денис, студент ЧГК ОП НПО группы  №22 электромонтер.Город Чапаевск
 */

public class KApplication extends JFrame
{
   
   private static final long serialVersionUID = 1L;
   private JTable table;
   private KModel model;
   private KFDB baza;
     /**
     * Единственный конструктор.
     */
      public KApplication() {
        /* первым оператором может идти вызов родительского контруктора
        * в данном случае, это конструктор Тест(String title)
        * Замечу, что если ни одного super нет, то все равно неявно будет поставлен super()
        */
       super("Тест");
               //  включаем в конструктор класса контейнер(менеджер размещения компонентов), расширяющего JFrame
      Container c = getContentPane();
// Создаем основное меню
                JMenuBar mb = new JMenuBar();
                setJMenuBar(mb);
// Создаем четыре подменю
                JMenu mFile = new JMenu("Файл");
                mb.add(mFile);
                JMenu mEdit = new JMenu("Правка");
                mb.add(mEdit);
                JMenu mView = new JMenu("Вид");
                mb.add(mView);
                JMenu mHelp = new JMenu("Справка");
                mb.add(mHelp);
//  Создаем элементы подменю "Файл"
                JMenuItem connect = new JMenuItem("Подключиться к...");
                connect.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L,
                        Event.CTRL_MASK));
                connect.setToolTipText("Создать новое подключение к базе или переподключиться");
                mFile.add(connect);

                JMenuItem create = new JMenuItem("Создать");
                create.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,
                        Event.CTRL_MASK));
                create.setToolTipText("Создать новый файл");
                mFile.add(create);

                JMenuItem open = new JMenuItem("Открыть...");
                open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W,
                        Event.CTRL_MASK));
                open.setToolTipText("Открыть файл");
                mFile.add(open);

                JMenuItem save = new JMenuItem("Сохранить");
                save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,
                        Event.CTRL_MASK));
                save.setToolTipText("Сохранить изменения");
                mFile.add(save);
                JMenuItem saveAs = new JMenuItem("Сохранить как...");
                saveAs.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R,
                        Event.CTRL_MASK));
                mFile.add(saveAs);
                mFile.addSeparator();// Разделитель
                JMenuItem exit = new JMenuItem("Выход");
                exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,
                        Event.CTRL_MASK));
                exit.setToolTipText("Выход из программы");
                mFile.add(exit);
// Создаем элементы подменю "Вид"
                JMenuItem viewWindow = new JMenuItem("Вид окна");
                viewWindow.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,
                        Event.CTRL_MASK));
                viewWindow.setToolTipText("Сменить внешний вид программы");
                mView.add(viewWindow);
// Создаем элементы подменю "Справка"
                JMenuItem the_program = new JMenuItem("О программе");
                the_program.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G,
                        Event.CTRL_MASK));
                the_program.setToolTipText("Посмотреть данные о программе");
                mHelp.add(the_program);
                JMenuItem vozmojnosti = new JMenuItem("Возможности программы");
                vozmojnosti.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
                        Event.CTRL_MASK));
                mHelp.add(vozmojnosti);
                JMenuItem the_project = new JMenuItem("О проекте");
                the_project.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,
                        Event.CTRL_MASK));
                mHelp.add(the_project);
//  Создаем элементы подменю "Правка"
                JMenuItem dobavit = new JMenuItem("Добавить запись");
                dobavit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D,
                        Event.CTRL_MASK));
                dobavit.setToolTipText("Добавить в базу нового студента");
                mEdit.add(dobavit);
                JMenuItem search = new JMenuItem("Поиск");
                search.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I,
                         Event.CTRL_MASK));
                search.setToolTipText("Поиск записи по базе");
                mEdit.add(search);
//Добавляем обработчик событий по нажатию для подменю "Подключиться"
connect.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                Connect con = new Connect();
                con.setVisible(true);
            }
        });
            //Добавляем обработчик событий по нажатию для подменю "Возможности"
vozmojnosti.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Vozmojnosti v = new Vozmojnosti();
                v.setVisible(true);
            }
});
//обработчик для "о проекте"
the_project.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                AboutProject ab = new AboutProject();
                ab.setVisible(true);
            }
        });
//Добавляем обработчик события по нажатию для подменю "поиск"
search.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            search s = new search();
        s.setVisible(true);   
            }
        });

//Добавляем обработчик события по нажатию для подменю "Выход"
         exit.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent e){
           System.exit(0); //Выход из системы
         }
            });

//Добавим листенер для кнопочги "Добавить"
 dobavit.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e) {
        dobavlenie dob = new dobavlenie();
        dob.setVisible(true);
   }
});

//Добавим листенер для кнопочги "О программе"
 the_program.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e) {
        AboutFrame dob = new AboutFrame();
        dob.setVisible(true);
   }
});

//Добавляем обработчик события по нажатию для подменю "Выход"
         exit.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent e){
           System.exit(0); //Выход из системы
         }
         });

         //Добавляем обработчик события по нажатию для подменю "Открыть"
                open.addActionListener(new ActionListener() {
                 public void actionPerformed(ActionEvent e) {
                  FileDialog fd = new FileDialog(new Frame(),
                                " Загрузить", FileDialog.LOAD);
                  fd.setVisible(true);
          }
  });
 
//Добавляем обработчик события по нажатию для подменю "Сохранить как..."
                saveAs.addActionListener(new ActionListener() {
                  public void actionPerformed(ActionEvent e) {
                   FileDialog fd = new FileDialog(new Frame(),
                                   " Сохранить", FileDialog.SAVE);
                   fd.setVisible(true);
           }
   });


//Не забудьте указать вашего пользователя и пароль (у меня "root" и "" соответственно);P.S. для пользователя от root пароль по умолчанию не требуется,поэтому оставляем его пустым :)
      baza = new KFDB("com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/22", "root", "");
      model = new KModel();
      model.setTableData(baza.getNomen("SELECT *FROM `database_college`LIMIT 0 , 30"));
      table = new JTable(model);
      table.getColumnModel().getColumn(0).setMaxWidth(50);
                String modes[] = { "Resize All Columns", "Resize Last Column",
        "Resize Next Column", "Resize Off", "Resize Subsequent Columns" };
    final int modeKey[] = { JTable.AUTO_RESIZE_ALL_COLUMNS,
        JTable.AUTO_RESIZE_LAST_COLUMN, JTable.AUTO_RESIZE_NEXT_COLUMN,
        JTable.AUTO_RESIZE_OFF, JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS };
      c.add(new JScrollPane(table), BorderLayout.CENTER);
      setSize(400, 300);//установили размер
                // по нажатию кнопки закрытия - закрыть программу
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                // вывести на экран
      setVisible(true);
   }
     
   /**
    * входная точка программы
         * @param args массив параметров из командной строки запуска
    */
   public static void main(String[] args)
   {
      new KApplication();
   }
}


Если вынести часть кода где работа с бд в отдельный класс то есть шанс что избавлюсь от ошибки?
К началу Посмотреть профиль Отправить личное сообщение
den4082 : 74
Новичок

СообщениеМар 04, 2010 20:05 
Ответить с цитатой
или посоветуйте другой способ если есть
К началу Посмотреть профиль Отправить личное сообщение
sx01 : 96
Новичок
Откуда: Санкт-Петербург

СообщениеМар 04, 2010 20:21 
Ответить с цитатой
StackTrace в студию и все станет ясно.
При беглом просмотре
"SELECT *FROM `database_college`LIMIT 0 , 30"
после * нужен пробел
К началу Посмотреть профиль Отправить личное сообщение
sx01 : 96
Новичок
Откуда: Санкт-Петербург

СообщениеМар 04, 2010 20:31 
Ответить с цитатой
По поводу вашего первого вопроса:
В конце конструктора KApplication вы делаете и коннект к базе и тут же запрос какой-то, все исключительные ситуации обрабатываете внутри соответствующих методов, так что чуть что наверняка получаете какой-нить NullPointerException где-нить в 203 строке и на этом все заканчивается, как вариант Rolling Eyes
К началу Посмотреть профиль Отправить личное сообщение
den4082 : 74
Новичок

СообщениеМар 04, 2010 20:50 
Ответить с цитатой
sx01 писал(а):
StackTrace в студию и все станет ясно.

Код:
run:
KFDB.Cannot connect to this db.
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database '22'
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
        at com.mysql.jdbc.Util.getInstance(Util.java:381)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1051)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3563)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3495)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:919)
        at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4001)
        at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1284)
        at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2183)
        at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:784)
        at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
        at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:354)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:284)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:185)
        at app.KFDB.<init>(KFDB.java:30)
        at app.KApplication.<init>(KApplication.java:217)
        at app.KApplication.main(KApplication.java:241)
Exception in thread "main" java.lang.NullPointerException
        at app.KFDB.getNomen(KFDB.java:47)
        at app.KApplication.<init>(KApplication.java:219)
        at app.KApplication.main(KApplication.java:241)
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)
К началу Посмотреть профиль Отправить личное сообщение
minimajack : 6
Новичок

СообщениеМар 04, 2010 20:59 
Ответить с цитатой
jdbc:mysql://localhost:3306/22

меняем на jdbc:mysql://localhost:3306/
потом уже проверяем наличие базы или ловим исключение на
connection.setCatalog(DATABASENAME)
К началу Посмотреть профиль Отправить личное сообщение
masyan : 920
Supreme moderator

СообщениеМар 04, 2010 21:03 
Ответить с цитатой
попробуйте так
Код:

public static void main(String[] args)
{
   new KApplication();
   baza = new KFDB("com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/22", "root", "");

}

из конструктора эту строку (baza=...) удалить


Цитата:

меняем на jdbc:mysql://localhost:3306/
потом уже проверяем наличие базы или ловим исключение на
connection.setCatalog(DATABASENAME)

если сервак не запущен, то опять же не будет JFrame отображен
К началу Посмотреть профиль Отправить личное сообщение
den4082 : 74
Новичок

СообщениеМар 04, 2010 21:08 
Ответить с цитатой
[quote="masyan"]попробуйте так
Код:

public static void main(String[] args)
{
   new KApplication();
   baza = new KFDB("com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/22", "root", "");

}

из конструктора эту строку (baza=...) удалить


Код:
run:
Exception in thread "main" java.lang.NullPointerException
        at app.KApplication.<init>(KApplication.java:219)
        at app.KApplication.main(KApplication.java:241)
Java Result: 1
BUILD SUCCESSFUL (total time: 7 seconds)
К началу Посмотреть профиль Отправить личное сообщение
masyan : 920
Supreme moderator

СообщениеМар 04, 2010 21:15 
Ответить с цитатой
У вас какие то проблемы с созданием таблицы. А точнее наверно с моделью. Где код класса KModel
К началу Посмотреть профиль Отправить личное сообщение
sx01 : 96
Новичок
Откуда: Санкт-Петербург

СообщениеМар 04, 2010 21:18 
Ответить с цитатой
Код:

model.setTableData(baza.getNomen("SELECT *FROM `database_college`LIMIT 0 , 30"));

Вот здесь наверное
К началу Посмотреть профиль Отправить личное сообщение
den4082 : 74
Новичок

СообщениеМар 04, 2010 21:53 
Ответить с цитатой
masyan писал(а):
У вас какие то проблемы с созданием таблицы. А точнее наверно с моделью. Где код класса KModel

Код:
import java.util.Vector;
import javax.swing.table.AbstractTableModel;


public class KModel extends AbstractTableModel
{
   private static final long serialVersionUID = 1L;
   //Имена колонок;
   protected Vector<String> columnNames;
   //Данные;
   private Vector<Vector<Object>> tableData;
   //Классы колонок;
   protected Vector<Object> vColClass;

   public KModel()
   {
      super();
      vColClass = new Vector<Object>();
      vColClass.add(0, Integer.class);
      vColClass.add(1, String.class);
      columnNames = new Vector<String>();
      columnNames.add("№");
      columnNames.add("Фамилия");
                columnNames.add("Имя");
                columnNames.add("Отчество");
                columnNames.add("Пол");
                columnNames.add("Год рождения");
                columnNames.add("Месяц рождения");
                columnNames.add("день рождения");
                columnNames.add("возраст");
                columnNames.add("номер группы");
                columnNames.add("Номер домашнего телефона");
                columnNames.add("Номер сотового");
                columnNames.add("E-mail");
                columnNames.add("город");
                columnNames.add("Улица");
                columnNames.add("Номер дома");
                columnNames.add("Номер квартиры");
                columnNames.add("домашняя страница");
                columnNames.add("страна");
                columnNames.add("Какую школу окончил");
                columnNames.add("Год окончания школы");
                columnNames.add("UIN");
                columnNames.add("Наличие степендии");
                columnNames.add("размер получаемой степендии");
                columnNames.add("Средняя оценка успеваемости");
   }

   @Override
   public int getColumnCount()
   {
      return columnNames.size();
   }

   @Override
   public int getRowCount()
   {
      return getTableData().size();
   }

   @Override
   public Object getValueAt(int row, int column)
   {
      return getTableData().get(row).get(column);
   }

   //Показывать заголовки колонок;
   public String getColumnName(int column)
   {
      return columnNames.get(column);
   }

   //Запрещаем редактировать первую колонку (счёт колонок идёт с нуля);
   public boolean isCellEditable(int row, int column)
   {
      if(column == 0)
      {
         return false;
      }
      return true;

   }

   public void setValueAt(Object obj, int row, int column)
   {
      if(column == 0)
      {
         (getTableData().get(row)).set(column, (Integer)obj);
      }
      else if(column == 1)
      {
         (getTableData().get(row)).set(column, (String)obj);
      }
      fireTableCellUpdated(row, column);
   }

   public Class<?> getColumnClass(int col)
   {
      Class<?> c = Object.class;
      try
      {
         c = (Class<?>)vColClass.get(col);
      } catch (RuntimeException e)
      {
         System.out.println(e);
      }
      return c;
   }

   public void setTableData(Vector<Vector<Object>> tableData)
   {
      this.tableData = tableData;
   }

   public Vector<Vector<Object>> getTableData()
   {
      return tableData;
   }

}


К началу Посмотреть профиль Отправить личное сообщение
 
Начать новую тему  Ответить на тему
Страница 1 из 2
На страницу 1, 2  След.
Список форумов
 -> Swing, AWT & SWT


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru