Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JNA+DLL, Как связать? 
:(
    Опции темы
qpile
Дата 27.1.2010, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 12.8.2009

Репутация: нет
Всего: нет



Как мне связать JAVA и имеющуюся у меня DLL , использую JNA? Во описание одной из функций моей DLL
Код

Функция TRANS2QUIK_CONNECT

Функция используется для установления связи библиотеки Trans2QUIK.dll с Рабочим местом QUIK.

long TRANS2QUIK_CONNECT (LPCSTR lpcstrConnectionParamsString, long* pnExtendedErrorCode, LPSTR lpstrErrorMessage, DWORD dwErrorMessageSize)

Параметр Описание 
Result Тип: Long. Возвращаемое число может принимать следующие значения:

TRANS2QUIK_SUCCESS – соединение установлено успешно, 
TRANS2QUIK_QUIK_TERMINAL_NOT_FOUND – в указанном каталоге либо отсутствует INFO.EXE, либо у него не запущен сервис обработки внешних подключений, в pnExtendedErrorCode в этом случае передается 0, 
TRANS2QUIK_DLL_VERSION_NOT_SUPPORTED – используемая версия Trans2QUIK.dll не поддерживается указанным INFO.EXE, в pnExtendedErrorCode в этом случае передается 0, 
TRANS2QUIK_DLL_ALREADY_CONNECTED – соединение уже установлено, в pnExtendedErrorCode в этом случае передается 0, 
TRANS2QUIK_FAILED – произошла ошибка при установлении соединения, в pnExtendedErrorCode в этом случае передается дополнительный код ошибки
 
lpcstrConnectionParamsString Тип: строка. Полный путь к каталогу с исполняемым файлом INFO.EXE, с которым устанавливается соединение 
pnExtendedErrorCode Тип: указатель на переменную типа Long. В случае возникновения ошибки может содержать расширенный код ошибки 
lpstrErrorMessage Тип: указатель на переменную типа Строка. В случае возникновения ошибки может получать сообщение о возникшей ошибке 
dwErrorMessageSize Тип: Long. Содержит длину строки, на которую ссылается указатель lpstrErrorMessage 




Я пишу следующий код(библиотеку приложил):
Код

 public interface TransToQuik  extends Library{

   public long TRANS2QUIK_CONNECT (String lpcstrConnectionParamsString, long pnExtendedErrorCode, String lpstrErrorMessage, long dwErrorMessageSize);


}

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String Error;
    long len;
    long FunctionResult=0;
    long pnExtendedErrorCode=0;
    String lpstrErrorMessage="";
    long dwErrorMessageSize=0;
    TransToQuik lib = (TransToQuik) Native.loadLibrary ("D:\\java project\\Robot\\TRANS2QUIK.dll",TransToQuik.class);
    FunctionResult=lib.TRANS2QUIK_CONNECT("D:\\QUIK5.15\\info.exe",pnExtendedErrorCode,lpstrErrorMessage,dwErrorMessageSize);
 
   // jTextArea1.setText(long(FunctionResult));
   
    }                                        




Но вылазите ошибка :
Код

run:
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: Error looking up function 'TRANS2QUIK_CONNECT': Íå íàéäåíà óêàçàííàÿ ïðîöåäóðà.

        at com.sun.jna.Function.<init>(Function.java:179)
        at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:345)
        at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:325)
        at com.sun.jna.Library$Handler.invoke(Library.java:203)
        at $Proxy0.TRANS2QUIK_CONNECT(Unknown Source)
        at robot.Robot.jButton1ActionPerformed(Robot.java:113)
        at robot.Robot.access$000(Robot.java:8)
        at robot.Robot$1.actionPerformed(Robot.java:36)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2015)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2338)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:253)
        at java.awt.Component.processMouseEvent(Component.java:6279)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3311)
        at java.awt.Component.processEvent(Component.java:6044)
        at java.awt.Container.processEvent(Container.java:2084)
        at java.awt.Component.dispatchEventImpl(Component.java:4639)
        at java.awt.Container.dispatchEventImpl(Container.java:2142)
        at java.awt.Component.dispatchEvent(Component.java:4465)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4664)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4327)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4257)
        at java.awt.Container.dispatchEventImpl(Container.java:2128)
        at java.awt.Window.dispatchEventImpl(Window.java:2612)
        at java.awt.Component.dispatchEvent(Component.java:4465)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:618)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:286)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:201)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:191)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:186)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:178)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:139)



PM MAIL   Вверх
casey
Дата 27.1.2010, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 20.12.2006
Где: Украина

Репутация: 1
Всего: 2



Судя по ошибке функция не найдена, возможно тут мешает маскирование имен, попробуй прогнать, например, утилитой impdef длл-ку свою, узнаешь реальные имена функций.

А по поводу кода, мне кажется так надо:

Код

public interface TransToQuik  extends Library{

   public int TRANS2QUIK_CONNECT (String lpcstrConnectionParamsString, int[] pnExtendedErrorCode, String lpstrErrorMessage, int dwErrorMessageSize);


}

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String Error;
    int len;
    int FunctionResult=0;
    int pnExtendedErrorCode=0;
    String lpstrErrorMessage="";
    int dwErrorMessageSize=0;
    TransToQuik lib = (TransToQuik) Native.loadLibrary ("D:\\java project\\Robot\\TRANS2QUIK.dll",TransToQuik.class);
    FunctionResult=lib.TRANS2QUIK_CONNECT("D:\\QUIK5.15\\info.exe",pnExtendedErrorCode,lpstrErrorMessage,dwErrorMessageSize);
 
   // jTextArea1.setText(long(FunctionResult));
   
    }                 


Почитай на https://jna.dev.java.net/ про типы и использование типа  long


PM MAIL WWW   Вверх
qpile
Дата 28.1.2010, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 12.8.2009

Репутация: нет
Всего: нет



Такой вариант тоже не работает..Ошибка :
run:
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: Error looking up function 'TRANS2QUIK_CONNECT': Íå íàéäåíà óêàçàííàÿ ïðîöåäóðà.

        at com.sun.jna.Function.<init>(Function.java:179)
        at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:345)
        at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:325)
        at com.sun.jna.Library$Handler.invoke(Library.java:203)
        at $Proxy0.TRANS2QUIK_CONNECT(Unknown Source)
        at robot.Robot.jButton1ActionPerformed(Robot.java:100)
        at robot.Robot.access$000(Robot.java:8)
        at robot.Robot$1.actionPerformed(Robot.java:36)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2015)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2338)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:253)
        at java.awt.Component.processMouseEvent(Component.java:6279)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3311)
        at java.awt.Component.processEvent(Component.java:6044)
        at java.awt.Container.processEvent(Container.java:2084)
        at java.awt.Component.dispatchEventImpl(Component.java:4639)
        at java.awt.Container.dispatchEventImpl(Container.java:2142)
        at java.awt.Component.dispatchEvent(Component.java:4465)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4664)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4327)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4257)
        at java.awt.Container.dispatchEventImpl(Container.java:2128)
        at java.awt.Window.dispatchEventImpl(Window.java:2612)
        at java.awt.Component.dispatchEvent(Component.java:4465)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:618)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:286)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:201)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:191)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:186)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:178)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:139)

Я сомневаюсь что имя функции задано не правильно. Я скопипастил ее из мануала.
PM MAIL   Вверх
casey
Дата 28.1.2010, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 20.12.2006
Где: Украина

Репутация: 1
Всего: 2



попробуй все таки имя   

_TRANS2QUIK_CONNECT@16
PM MAIL WWW   Вверх
qpile
Дата 28.1.2010, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 12.8.2009

Репутация: нет
Всего: нет



когда задаешь это имя в интерфейсе JAVA на ошибку ругается
PM MAIL   Вверх
casey
Дата 28.1.2010, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 20.12.2006
Где: Украина

Репутация: 1
Всего: 2



Скачал я твою длл, PE Explorer и impdef в один голос говорят, что твоя функция имеет имя _TRANS2QUIK_CONNECT@16. Это типичное маскирование имен в Визуал С++. В документации к длл указывается имя TRANS2QUIK_CONNECT, там примеры есть под визуал с++ и с#, они поймут такое имя, так как визуал студия прозрачно применяет это маскирование.
Джава ругается на символ @ это понятно.
PM MAIL WWW   Вверх
qpile
Дата 28.1.2010, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 12.8.2009

Репутация: нет
Всего: нет



Спасибо за помощь! Киньте телефон в личку..Денежку кину в подарочек (небольшой есс-но). 

Ошибка теперь изменилась! Ноэто уже радует smile

Exception in thread "AWT-EventQueue-0" java.lang.ClassFormatError: Duplicate field name&signature in class file robot/Robot$TransToQuik
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:764)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:144)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:382)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:75)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:294)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:288)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:287)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:399)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:334)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:332)
        at robot.Robot.jButton1ActionPerformed(Robot.java:99)
        at robot.Robot.access$000(Robot.java:8)
        at robot.Robot$1.actionPerformed(Robot.java:36)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2015)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2338)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:253)
        at java.awt.Component.processMouseEvent(Component.java:6279)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3311)
        at java.awt.Component.processEvent(Component.java:6044)
        at java.awt.Container.processEvent(Container.java:2084)
        at java.awt.Component.dispatchEventImpl(Component.java:4639)
        at java.awt.Container.dispatchEventImpl(Container.java:2142)
        at java.awt.Component.dispatchEvent(Component.java:4465)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4664)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4327)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4257)
        at java.awt.Container.dispatchEventImpl(Container.java:2128)
        at java.awt.Window.dispatchEventImpl(Window.java:2612)
        at java.awt.Component.dispatchEvent(Component.java:4465)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:618)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:286)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:201)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:191)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:186)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:178)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:139)

PM MAIL   Вверх
casey
Дата 29.1.2010, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 20.12.2006
Где: Украина

Репутация: 1
Всего: 2



Кинь сюда весь код, посмотреть...
PM MAIL WWW   Вверх
qpile
Дата 29.1.2010, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 12.8.2009

Репутация: нет
Всего: нет



Код



package robot;
import com.sun.jna.*;
import com.sun.jna.Native;
import com.sun.jna.Platform;

public class Robot extends javax.swing.JFrame {

  
    public Robot() {
        initComponents();
    }

  
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jTabbedPane1 = new javax.swing.JTabbedPane();
        jPanel1 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jPanel2 = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Скальпер ООО \"ДОХОДНЫЙ ДОМ ИНВЕСТОРА\"");

        jTabbedPane1.setTabPlacement(javax.swing.JTabbedPane.BOTTOM);
        jTabbedPane1.setToolTipText("Скальпер ООО \"ДОХОДНЫЙ ДОМ ИНВЕСТОРА\"");

        jButton1.setText("Is DLL connected");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 229, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 597, Short.MAX_VALUE)
                .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 135, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(60, 60, 60))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGap(25, 25, 25)
                        .addComponent(jButton1))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 118, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(461, Short.MAX_VALUE))
        );

        jTabbedPane1.addTab("Управление QUIK", jPanel1);

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 1031, Short.MAX_VALUE)
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 590, Short.MAX_VALUE)
        );

        jTabbedPane1.addTab("Робот", jPanel2);

        getContentPane().add(jTabbedPane1, java.awt.BorderLayout.CENTER);

        pack();
    }// </editor-fold>                        
 public interface TransToQuik  extends Library{

  native public int _TRANS2QUIK_CONNECT@16(String lpcstrConnectionParamsString, int pnExtendedErrorCode, String lpstrErrorMessage, int dwErrorMessageSize);

}

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String Error;
    int len;
    int FunctionResult=0;
    int pnExtendedErrorCode=0;
    String lpstrErrorMessage="";
    int dwErrorMessageSize=0;
    TransToQuik lib = (TransToQuik) Native.loadLibrary ("D:\\java project\\Robot\\TRANS2QUIK.dll",TransToQuik.class);
   // FunctionResult=lib._TRANS2QUIK_CONNECT@16("D:\\QUIK5.15\\",pnExtendedErrorCode,lpstrErrorMessage,dwErrorMessageSize);

   // jTextArea1.setText(long(FunctionResult));

    }                                        


    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Robot().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JTextArea jTextArea1;
    // End of variables declaration                   

}


PM MAIL   Вверх
qpile
Дата 29.1.2010, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 12.8.2009

Репутация: нет
Всего: нет



ссылка на файл и документацию

http://webfile.ru/4264049
http://webfile.ru/4264052
PM MAIL   Вверх
casey
Дата 1.2.2010, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 20.12.2006
Где: Украина

Репутация: 1
Всего: 2



Ну что тут сказать. Я в джаве не спец, но по-моему вызвать функции содержащие знак @ через JNA не удасться. Как выход вижу:

1. самое нормальное решение - писать все на c/с++ и не морочить голову.
Поясню почему:
- ни о какой кроссплатформенности и речи быть не может - ты привязан к винде своей длл-кой (на фига тогда джава);
- тебе придется использовать указатели (возможно и указатели на указатели)  и нэйтив-типы - тут по-моему в джаве ваще туго будет;

2. Написать длл-обертку, экспортирующую функции без маскирования (как extern "C") и тогда можно использовать и JNI и JNA.
PM MAIL WWW   Вверх
qpile
Дата 1.2.2010, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 12.8.2009

Репутация: нет
Всего: нет



Обертку можно написать с помощью 
https://jna.dev.java.net/javadoc/com/sun/jn...tionMapper.html ...Но я не знаю как это использовать..ни одного примера

Добавлено через 1 минуту и 10 секунд
вот с помощью этого к библе подключился без проблем

http://www.jinvoke.com/
Но она платная
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0971 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.