|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
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 |
|
|
| Если программа нуждается в БД, а ее нет, то логично предложить пользователю ее создать или ... |
|
|
|
 |
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 строке и на этом все заканчивается, как вариант  |
|
|
|
 |
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 |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|