Допомога - Пошук - Користувачі - Календар
Повна версія цієї сторінки: Java, всі питання тут
Теревені — Форум > Комп'ютери > Програмування
Перекоти-поле
Порадьте, будь ласка, (бажано з приведеним кодом) як зберегти змінну аплету (наприклад об'єкт в якому зберігаються налаштування аплету). Сериалізацію об'єкту я використовувати не хочу - може є якісь кращі варіанти?...
Можливо в аплетах є щось подібне до сесій так як в сервлетах, або можна оголосити змінну з часом існування "до другого пришестя"... Підкажіть. unsure.gif
Перекоти-поле
Мій web-додаток складається з сервлета та аплета написаних на Java. Аплет надає можливість користувачу працювати з конкретною таблицею БД (переглядати, редагувати і зберігати її) для чого він використовує сервлет. Тобто, аплет посилає запити сервлету на вибірку даних з таблиці БД чи збереження зроблених користувачем змін в таблиці БД. Для відображення таблиці в аплеті було використано компоненти DataExpress.
Вибірка даних з таблиці БД відбувається у мене так. Аплет посилає сервелту назву БД, назву таблиці БД, URL БД, логін та пароль що вів користувач та назву драйверу підєднання до БД. Сервлет на основі цих даних формує запит до БД на вибірку даних і повертає ці дані назад аплету який їх і відображає. Це в мене вже працює.
Збереження змін зроблених над цією таблицею БД повинно було проходити так. Коли користувач натискає на кнопку Зберегти в аплеті, то аплет посилає сервлету серіалізований об'єкт NewMetaDataDBConnection що містить назву БД, назву таблиці БД, URL БД, логін та пароль що вів користувач, назву драйверу підєднання до БД і самі дані що потрібно зберегти в таблиці БД. Гарантую що об'єкт містить правильні дані. Тоді в сервлеті я пишу наступний код для збереження змін в таблиці БД:

database1.setConnection(new ConnectionDescriptor(NewMetaDataDBConnection.URL, NewMetaDataDBConnection.Login, NewMetaDataDBConnection.Password, false,NewMetaDataDBConnection.Driver));
        database1.setDatabaseName("");

          NewMetaDataDBConnection.data.loadDataSet(queryDataSet1);
          DataSetData data = DataSetData.extractDataSet( queryDataSet1 );
          database1.saveChanges(queryDataSet1);

Проблема полягає в тому, що я не розумію, чому зміни зроблені користувачем в таблиці БД не зберігаються сервлетом. Тобто, чому цей код нічого не зберігає в таблиці БД nevdacha.gif .
Первісні коди додаю.
Aleph
Чи може хтось порадити зручне та компактне інтегроване середовище для розробки JAVA програм?
Dmitrius
Однозначно Eclipse 3.3 cool1.gif
.salo
Intellij IDEA. Пробував і екліпс, але вони навіть поряд не стоять. правда ідея не надто "компактна", але воно того аврте, я тепер писати в пхп взагалі не можу, не вистачає простих речей (наприклад перейменування методу класу у всіх файлах де він використовується одночасно, і т. д.). Точно шо бери ідею smile.gif

(Kurt @ 2.10.2006 10:18) [snapback]45220[/snapback]

Мій web-додаток складається з сервлета та аплета написаних на Java. Аплет надає можливість користувачу працювати з конкретною таблицею БД (переглядати, редагувати і зберігати її) для чого він використовує сервлет. Тобто, аплет посилає запити сервлету на вибірку даних з таблиці БД чи збереження зроблених користувачем змін в таблиці БД. Для відображення таблиці в аплеті було використано компоненти DataExpress.
Вибірка даних з таблиці БД відбувається у мене так. Аплет посилає сервелту назву БД, назву таблиці БД, URL БД, логін та пароль що вів користувач та назву драйверу підєднання до БД. Сервлет на основі цих даних формує запит до БД на вибірку даних і повертає ці дані назад аплету який їх і відображає. Це в мене вже працює.
Збереження змін зроблених над цією таблицею БД повинно було проходити так. Коли користувач натискає на кнопку Зберегти в аплеті, то аплет посилає сервлету серіалізований об'єкт NewMetaDataDBConnection що містить назву БД, назву таблиці БД, URL БД, логін та пароль що вів користувач, назву драйверу підєднання до БД і самі дані що потрібно зберегти в таблиці БД. Гарантую що об'єкт містить правильні дані. Тоді в сервлеті я пишу наступний код для збереження змін в таблиці БД:

database1.setConnection(new ConnectionDescriptor(NewMetaDataDBConnection.URL, NewMetaDataDBConnection.Login, NewMetaDataDBConnection.Password, false,NewMetaDataDBConnection.Driver));
        database1.setDatabaseName("");

          NewMetaDataDBConnection.data.loadDataSet(queryDataSet1);
          DataSetData data = DataSetData.extractDataSet( queryDataSet1 );
          database1.saveChanges(queryDataSet1);

Проблема полягає в тому, що я не розумію, чому зміни зроблені користувачем в таблиці БД не зберігаються сервлетом. Тобто, чому цей код нічого не зберігає в таблиці БД nevdacha.gif .
Первісні коди додаю.




Зкоду нічого не зрозуміло (приєднаний файл правда не розбирав sad.gif), але не видно де ти комітиш зміни в базу. Тобто має вкінці дій з базою бути стрічка .comitTransaction
andriyukr
(Aleph @ 25.05.2007 00:29) [snapback]121583[/snapback]

Чи може хтось порадити зручне та компактне інтегроване середовище для розробки JAVA програм?


Я користуюсь JCreator'ом.

В мене я одне питання, трохи не серйозне, але ніяк не можу його зрозуміти. Це з тесту в університеті:
int x=k;
int y=k;

Скільки буде ++x+y++ ?

a) 2k+1
b) 2k
c) 2k+1
d) 2k+2


Взагалі то ++х означає х++, одже в теорії ++x+y++ має виходити 2k+2, а на практиці друкує 2k+1.

Чому? nevdacha.gif
Сварус
andriyukr, x++ це не одне і те ж що ++x:
"++x" - додає до змінної х одиницю і в цьому ж виразі проводить обрахунки зі зміненим значенням х.
"х++" - додає до змінної одиницю після ";", тобто після закінчення виконання лексеми.

Таким чином лексема
int res = ++x+y++;

розкладається на дві:
int res = (x+1)+y;
y=y+1;
kissarat
може я плуг. але вивчення моэъ джави мысяць тому закычилось на rmi
я скопыював два класи з документацыъ
http://java.sun.com/javase/6/docs/technote...ello-world.html

package unker.learing.rmi;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Hello extends Remote {
String sayHello() throws RemoteException;
}


package unker.learing.rmi;

import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class Server implements Hello {

public Server() {}

public String sayHello() {
return "Hello, world!";
}

public static void main(String args[]) {

try {
Server obj = new Server();
Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0);

// Bind the remote object's stub in the registry
Registry registry = LocateRegistry.getRegistry();
registry.bind("Hello", stub);

System.err.println("Server ready");
} catch (Exception e) {
System.err.println("Server exception: " + e.toString());
e.printStackTrace();
}
}
}


ы воно викинуло мены ран-тайм екзепшн

Server exception: java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
java.net.ConnectException: Connection refused
java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
java.net.ConnectException: Connection refused
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
at unker.learing.rmi.Server.main(Server.java:24)
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:180)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFacto
ry.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFacto
ry.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
... 5 more


навыть не знаю шо би то мало бути
.salo
Цитата(Younker @ 17.02.2008 14:52) *
може я плуг. але вивчення моэъ джави мысяць тому закычилось на rmi
я скопыював два класи з документацыъ
http://java.sun.com/javase/6/docs/technote...ello-world.html

package unker.learing.rmi;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Hello extends Remote {
String sayHello() throws RemoteException;
}


package unker.learing.rmi;

import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class Server implements Hello {

public Server() {}

public String sayHello() {
return "Hello, world!";
}

public static void main(String args[]) {

try {
Server obj = new Server();
Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0);

// Bind the remote object's stub in the registry
Registry registry = LocateRegistry.getRegistry();
registry.bind("Hello", stub);

System.err.println("Server ready");
} catch (Exception e) {
System.err.println("Server exception: " + e.toString());
e.printStackTrace();
}
}
}


ы воно викинуло мены ран-тайм екзепшн

Server exception: java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
java.net.ConnectException: Connection refused
java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
java.net.ConnectException: Connection refused
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
at unker.learing.rmi.Server.main(Server.java:24)
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:180)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFacto
ry.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFacto
ry.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
... 5 more


навыть не знаю шо би то мало бути



чесно кажучи не розбирався, але проблема подібна до моєї. і вирішилось це тим, що я прописав у конфігурації зовнішню айпішку
Gubtor
Цитата(Aleph @ 25.05.2007 00:29) *
Чи може хтось порадити зручне та компактне інтегроване середовище для розробки JAVA програм?

Якщо на перспективу - то NetBeans. Це середовище розробляється Sun Microsystems і є непогана література по ньому. Повністю фріварне. Але так як проект молодий ще є куча багів.
Eclipse - так само повністю безкоштовний продукт. Менше багів порівняно з NetBeans, але розробка ведеться окремою спільнотою, не пов'язаною з Sun. Непоганим його різновидом є EasyEclipse.
Lactarius
Все залежить від того що розробляється... Наприклад якщо це програма під платформу гугл андроїд то тільки екліпс.

Для початку можна екліпс... Особисто зараз юзаю зараз НетБінс... Раніше користувався IDEA теж хороше середовище
Ma)(imuM
Хлопці, а по чому краще вчити, коли ти в яві ще чайник? Я раніше на Паскалі та Делфі програмував - було все прекрасно, але тепер перейшов на ЯВУ і багато не зрозумілого з"явилось! Вчу по "JAVA в примерах" (2 видання). Чи може мені звернутись в тему пошуку літератури?

З.І. Що мені сподобалось в яві, так це об"являти змінні в будьякому місці коду! Але не сподобалось чуттєвість до регістру...
Ma)(imuM
Хлопці, а по чому краще вчити, коли ти в яві ще чайник? Я раніше на Паскалі та Делфі програмував - було все прекрасно, але тепер перейшов на ЯВУ і багато не зрозумілого з"явилось! Вчу по "JAVA в примерах" (2 видання). Чи може мені звернутись в тему пошуку літератури?

З.І. Що мені сподобалось в яві, так це об"являти змінні в будьякому місці коду! Але не сподобалось чуттєвість до регістру...
Lactarius
Джава краще вчити по С++
comdev
QUOTE (Lactarius @ 22.03.2010 11:43) *
Джава краще вчити по С++


Не обов'язково, зовсім не обов'язково. Це мови програмування, схожі по синтиксису, але різні по своїй філософії.
По цій же ж логіці можна сказати, що С++ краще вчити по Smalltalk

QUOTE (Ma)(imuM @ 22.06.2009 20:20) *
Хлопці, а по чому краще вчити, коли ти в яві ще чайник? Я раніше на Паскалі та Делфі програмував - було все прекрасно, але тепер перейшов на ЯВУ і багато не зрозумілого з"явилось! Вчу по "JAVA в примерах" (2 видання). Чи може мені звернутись в тему пошуку літератури?

З.І. Що мені сподобалось в яві, так це об"являти змінні в будьякому місці коду! Але не сподобалось чуттєвість до регістру...



Якщо із англійською все нормально (а професійному програмісту потрібно знати хоча б на технгічному рівні), то можна вчити по оригінальним книгам від Sun (вже Oracle):
http://java.sun.com/docs/books/tutorial/index.html? починати із розділу Trails Covering the Basics

ще непоганий ресурс, але для більш високого рівня http://www.java-course.ru/

і дозволю собі пропіарити свій блоґ ( rolleyes.gif ): http://bytes.org.ua/ - там я інколи піднімаю цікаві питання щодо програмування на джава.
Lactarius
Цитата
По цій же ж логіці можна сказати, що С++ краще вчити по Smalltalk

От за смолток прошу мені тут не тово. смолток повністю обєктноорієнтовна мова. синтаксис і принципи там зовсім різні. С++ подібна по стилю та логіці програмування. знання С++ дадуть можливість зрозуміти принципи за якими працює джава.

Та й дуже кумедно коли мене старається підбакланити людина, що пафосно показує отаке http://bytes.org.ua/2010/03/19/pobachyla-s...top-translator/
МегаРавлик
Таке питання. Є програмка, типу локального месенджера. Спершу запускається графіка (клас View), потім включається слухання сервера (DoItNow). Чому коли виконується SwingUtilities.invokeLater(new DoItNow(thisWndw)) програма зразу зависає (через отой while(true)) на відміну від new Thread(new DoItNow(thisWndw)).start(). І як можна цьому запобігти, бажано використовуючи перший варіянт з InvokeLater?

Головний код:
Код
public class Client {

    @SuppressWarnings({"static-access", "element-type-mismatch"})
    static public View thisWndw;

    public static void main(String args[]) throws Exception {
        JFrame.setDefaultLookAndFeelDecorated(true);
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                try {
                    UIManager.setLookAndFeel("org.pushingpixels.substance.api.skin.SubstanceGraphiteLookAndFeel");
                } catch (Exception e) {
                    System.out.println("Substance Graphite failed to initialize");
                }
                thisWndw = new View();
                thisWndw.setVisible(true);
                thisWndw.setLocationRelativeTo(null);
            }
        });
        SwingUtilities.invokeLater(new DoItNow(thisWndw));
    }
}


Код класу DoItNow:
Код
public class DoItNow implements Runnable {

    View thisWndw;

    public DoItNow(View thisWndww) {
        thisWndw = thisWndww;
    }

    public void run() {
        while (true) {
        ... //Постійне прослуховування.
        }
    }
}
МегаРавлик
Несподівано мені вдалось самому додуматись smile.gif

Основний код:
Код
public static void main(String args[]) throws Exception {
        JFrame.setDefaultLookAndFeelDecorated(true);
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                try {
                    UIManager.setLookAndFeel("org.pushingpixels.substance.api.skin.SubstanceGeminiLookAndFeel");
                } catch (Exception e) {
                    System.out.println("Substance Graphite failed to initialize");
                }
                thisWndw = new View();
                thisWndw.setVisible(true);
                thisWndw.setLocationRelativeTo(null);
                new Thread(new DoItNow()).start();
            }
        });
    }

Клас DoItNow (весь час слухає сервер)
Код
public class DoItNow implements Runnable {
    public DoItNow() {
    }
    public void run() {
        while (true) {
            //Якщо поточний клієнт готовий до роботи
            if (Client.thisWndw != null && Client.thisWndw.curClient != null && Client.thisWndw.curClient.isItOpen() == true) {
                    COM_DATA b = new COM_DATA();
                    //Зчитування інформації з сервера
                    b = Client.thisWndw.curClient.getServerData();
                    //Перенаправити на обробку
                    Client.makeAction(b);
            }
        }
    }
}

Обробляє дані з сервера, перерозподіляє функції
Код
public static void makeAction(final COM_DATA b) throws InterruptedException, InvocationTargetException {
        SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
            ...
            }
        });
    }
chipie
проблема проста як двері: маємо jar файл. необхідно, щоб прога запускалась на машинах, де немає jre.
тоді або
1. порадьте будь ласка людський конвертер jar->exe. але при цьому вся кросплатформеність іде коту під хвіст.
або
2. як ініціалізувати віртуальну машину?
FT232BM
Цитата(chipie @ 19.06.2010 23:13) *
проблема проста як двері: маємо jar файл. необхідно, щоб прога запускалась на машинах, де немає jre.
тоді або
1. порадьте будь ласка людський конвертер jar->exe. але при цьому вся кросплатформеність іде коту під хвіст.
або
2. як ініціалізувати віртуальну машину?

Читай
http://en.wikipedia.org/wiki/AOT_compiler
Для перегляду повної версії цієї сторінки, будь ласка, перейдіть по посиланню.
Русская версия IP.Board © 2001-2010 IPS, Inc.