powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как сделать JAR в IntellJIDEA
25 сообщений из 50, страница 2 из 2
Как сделать JAR в IntellJIDEA
    #32826187
serjik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот пример манифест файла
Manifest-Version: 1.0
Main-Class: mobiltrade.MobilTrade
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32827519
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фигня какая-то получается:

вот этот build.xml, исправленный после подсказок - генерит наконец-то khr.jar
==============================================
<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="KHR" default="make-jar">

<property name="compiler.debug" value="on"/>
<property name="compiler.generate.no.warnings" value="off"/>
<property name="compiler.args" value=""/>
<property name="compiler.max.memory" value="128m"/>
<patternset id="compiler.excluded"/>
<patternset id="compiler.resources">
<include name="**/?*.properties"/>
<include name="**/?*.xml"/>
<include name="**/?*.gif"/>
<include name="**/?*.png"/>
<include name="**/?*.jpeg"/>
<include name="**/?*.jpg"/>
<include name="**/?*.html"/>
<include name="**/?*.dtd"/>
<include name="**/?*.tld"/>
</patternset>


<property name="jdk.home.java_version_1.5.0" value="C:/Program Files/Java/jdk1.5.0"/>
<path id="jdk.classpath.java_version_1.5.0">
<fileset dir="${jdk.home.java_version_1.5.0}">
<include name="jre/lib/jce.jar"/>
<include name="jre/lib/charsets.jar"/>
<include name="jre/lib/javaws.jar"/>
<include name="jre/lib/deploy.jar"/>
<include name="jre/lib/plugin.jar"/>
<include name="jre/lib/jsse.jar"/>
<include name="jre/lib/rt.jar"/>
<include name="jre/lib/forms_rt.jar"/>
<include name="jre/lib/ext/dnsns.jar"/>
<include name="jre/lib/ext/sunjce_provider.jar"/>
<include name="jre/lib/ext/sunpkcs11.jar"/>
<include name="jre/lib/ext/localedata.jar"/>
<include name="../../../IntelliJ-IDEA-4.5/redist/javac2.jar"/>
</fileset>
</path>

<property name="project.jdk.home" value="${jdk.home.java_version_1.5.0}"/>
<property name="project.jdk.classpath" value="jdk.classpath.java_version_1.5.0"/>

<import file="${basedir}/module_khr.xml"/>

<target name="init" description="Build initialization">
<!-- Perform any build initialization in this target -->
<property name="bld.dir" value="${module.khr.basedir}/" />
<property name="lib.dir" value="${module.khr.basedir}/" />
</target>
<target name="make-jar" depends="init">
<jar jarfile="${lib.dir}/khr.jar">
<fileset dir="${bld.dir}/classes/" includes="**" />
</jar>
</target>


<target name="clean" depends="clean.module.khr" description="cleanup all"/>

<target name="make-jar" depends="init, clean, compile.module.khr" description="build all"/>
</project>
=====================
после этого - естественно он не запускается, нет грит main class.
ОК. Переименовал я его из khr.jar в khr.zip и вошел в архив. Открыл папку META-INF и там открыл файл mainest.mf

естественно никаого упоминания про Main-Class там нет!!!

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.1
Created-By: 1.5.0-b64 (Sun Microsystems Inc.)

Что ж, В П И С АЛ ручками

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.1
Created-By: 1.5.0-b64 (Sun Microsystems Inc.)
Main-Class: Main_KHR

Думаете, что-то изменилось!?

Сохранил-вышел-переименовал снова в jar-запустил - запустилась первая форма (Меню), но при нажатии на опцию меню - открыть новую форму - новая форма не показывается.
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32827875
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше бы ты прочитал Г Л А З К А М И, ссылки которые я написал.


Думаете, что-то изменилось!?

Конечно. Раньше не было никакого main class, а теперь есть не работающий.
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32827876
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сорри, просто бошка болит после корпоративного праздника.
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32828877
serjik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не обязательно переделывать в zip, jar файл можно открыть Ctrl+PageDown

Кстати у тебя какая система? и чего у тебя в переменных понаписавано
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32829298
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
система

W2000 SP3
IntelliJ IDEA 4.5

в переменных Environment Variables в разделе System variables не нашел ни следа упоминания о джаве.

а что!?

я так подозреваю, что-то надо там подкрутить? типа путь к джава компиллеру?
а как?
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32829320
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
итак....научился генерить jar файл для своих приложений (это я так думаю)

но почему-то запускается только первая ГЛАВНАЯ форма меню или приложение состоящее из одной формы (ну типа тесты и самплы сановские).
ТО есть джар файл вроде как запускается и "работает".

Никак не могу понять - почему не запускается, вернее не открывается моя форма из главной формы?
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32829328
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что значит не открывается?

что пишется в консоле при этом?

всё ли ты поместил в jar, что нужно? У тебя довольно хитрые инклюды, проверь лишний раз.
Достань содержимое jarа и просто запусти приложение, типа
java -classpath .;xxx YourMainClass

Если никаких сообщений об ошибках нет и если содержимое jar'a запустится как положенно - тогда и будем думать, что же можно было сделать "не так" :)
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32829332
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUsчто значит не открывается?

кликаю на созданном jar файле - ----> открывается приложение и главная форма (МОЕ МЕНЮ),
затем в меню выбираю опцию показать форму Employees
после этого ничего не происходит.



NotGonnaGetUsчто пишется в консоле при этом?
ничего не пишет - я ж в TotalCommandere кликаю

NotGonnaGetUsвсё ли ты поместил в jar, что нужно? У тебя довольно хитрые инклюды, проверь лишний раз.

все что было в classes ---- все ушло в jar

NotGonnaGetUsДостань содержимое jarа и просто запусти приложение, типа java -classpath .;xxx YourMainClass

Если бы еще знать конкретно что там в этой строке что означает и что такое и зачем ".;" что вместо xxx
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32829334
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробовал запустить мой jar таким образом

в cmd зашел в мой каталог

набрал javaw -jar khr.jar

в том же каталоге, где проект идеевский лежит

открыла первую форму меню с иконками в меню, но при выборе опции открыть новую форму - ничего не сработало и никаких ругательств не выдала


если попробовать скопировать джар файл в корень с: то форма менюб запускается но без иконок - толкьо текст (то есть она в этом случае не знает откуда иконки брать) и ....блин иконки в jar файл не входят - то есть приходится таскать за собой иокнки в отдельном каталоге.

Или есть способ просто их впихнуть в jar файл насильно в виде дополнительного каталога?

Чем больше ковыряюсь в яве тем больше ненавижу эту технологию - столько ненужных и недокументированных шагов надо предусмотреть
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32829335
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, кстати, при открытии формы Employees она должна обратиться к классу DB и пойти на коннект с SQL SERVER и вытащить resultset, чтоб его потом на форме открывшейся показать.

Может у меня не происходит вызов этого класса DB, то есть не происходит соедирение с базой данных и соотвественно не выполняется следущая строка в коде

public void showEmployees() throws Exception {

DB.getConnection();
MyOfficeTreeResultDataSet();

// а до этого уже не доходит!!!!?

formEmployees myform = new formEmployees(/*myDatabase*/);
myform.setSize(1024, 768);
myform.setVisible(true);
}
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32829350
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
java без консоли - не java :)

Запусти из cmd, если тотал командер скрывает консоль.
Туда обычно пишутся все не пойманные эксепшены и System.out'ы.

java -help
там написано, что писать в класспас.

Можешь не писать .; если не нравится :)
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32829360
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я ж грю НИКАКОГО ексепшена и никаких сообщений в окне cmd
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32829671
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нет никаких эксепшенов, то проблема в кривом коде, а не java или jar.
Иди и смотри что делает тобой же написанный код.
Было бы забавно на него глянуть целиком.

Вне архива твоё приложение запускалось как надо? Ты так и не ответил.
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32829708
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что значит вне архива?

оно нормально срабатывает в IDEA, а если запускать jar, то только первая форма открывается.
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32829743
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Imgonnagetyoubabe....

если тебе забавно:

приложение делает вот что:

-открывает форму главного меню
-при выборе опции Employees - открывает форму Employees
-перед открытием формы Employees обращается к классу DB чтоб заполнить деревья (список офисов....) на форме
-в процессе коловращения в классе DB лезет на SQL SERVER и генерит
Object[][] o_data; массив офисов
Object[][] s_data; массив видов сервиса
Object[][] l_data; массив языков
- затем КОНСТРУИРУЕТ форму, размещает всевозможные кнопочки и панельки и выравнивает их
- затем заполняет деревья
- затем.....а вот хрен она делает в jar файле затем.....вообще не доходит до стадии открытия формы Employees.

что-то невпорядке с стадией DB, наверное
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32830893
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причин может быть море. Без взгляда на код трудно сказать.

Например,
в своём коде ты перехватываешь exception's,
но обрабатываешь их не правильно. В итогде программа не делает то, что нужно.

например:
Код: plaintext
1.
2.
3.
4.
5.
 try  {
   do .smth.with.Exception();
  dialog.show();
}  catch  (Exception e) {
}
В итоге вместо диалога получишь ничего и не будет никаких сообщений.

!!!Не должно существовать сatch, которые ничего не делают. Они либо должны фиксить ошибочное состояние, либо громко-громко об этом кричать.

2) Почему это работает в IDEA, но не работает в jar.
- Твой код может обращаться к классам из других jars, которые IDEA прописывает в classpath при запуске приложения. А ты их в манифест не вписал.
- Твой код использует файлы ресурсов (*.xml *.jpg etc). Ты мог пропустить его в jar или использовать относительные пути до этих файлов. В идее и в jar рут может быть разный. И т.п.
- Ты можешь писать в файл, который расположен теперь внутри jar. В итоге ошибки
- И т.д.

Если все ошибки перехватываются, и корректно обрабатываются ты быстро найдёшь причину. Если нет - будешь задавать глупые вопросы.

-------
В любом случае, ты всегда можешь запустить свой код в режиме дебага и подконнектиться к нему из IDEA. После чего вопросов совсем не останется.

Если дебагер это слишком сложно для неокрепшего разума, вставь 50 систем.аут'ов. Найди ту строчку после которой код исполняется не так, как тебе хочется. Если не станет понятно, почему он не исполняется, приведи этот кусок здесь - посмотрим, расскажем.


з.ы.
Только не надо говорить, что у тебя "просто не работает".
Никакого дельного ответа, кроме "сделай чтоб работало", ты никогда не получишь, потому что никто твой код в глаза не видел и не может предположить всех глупостей, которые в нём можно сделать.
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32831179
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок,
пока не нужно деталей, можешь рассказать в принципе что я делаю неправильно на первой форме (МЕНЮ)? Причем эту форму показывает мой созданный jar, и даже иконки для пунктов меню показывает (то есть он знает путь к картинкам)

import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Main_KHR extends JFrame{
String[] columnNames;
static Object[][] data;
public static void main(String[] args)
{
Main_KHR mainmenu = new Main_KHR();
mainmenu.setSize(400,200);
mainmenu.setVisible(true);
}
public Main_KHR() {
super("KHR Main Menu");
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
DB.closeConnection();
}
});
Container contentPane = this.getContentPane();
contentPane.setLayout(new BorderLayout());
JMenuBar menubar = new JMenuBar();
this.setJMenuBar(menubar);
JMenu menuFile = new JMenu("File");
JMenu menuDatabase = new JMenu("Databases");
menubar.add(menuFile);
Action quit = new QuitAction();
menuFile.add(quit);
menubar.add(menuDatabase);
final JMenuItem itemd1 = new JMenuItem("Employees");
final JMenuItem itemd2 = new JMenuItem("Projects");
final JMenuItem itemd3 = new JMenuItem("Contractors");
final JMenuItem itemd4 = new JMenuItem("Library");
menuDatabase.add(itemd1);
menuDatabase.addSeparator();
menuDatabase.add(itemd2);
menuDatabase.addSeparator();
menuDatabase.add(itemd3);
menuDatabase.addSeparator();
menuDatabase.add(itemd4);
ImageIcon image1 = new ImageIcon(getToolkit().createImage("images/Employees.gif"));
ImageIcon image2 = new ImageIcon(getToolkit().createImage("images/Projects.gif"));
ImageIcon image3 = new ImageIcon(getToolkit().createImage("images/Contractors.gif"));
ImageIcon image4 = new ImageIcon(getToolkit().createImage("images/Library.gif"));
itemd1.setIcon(image1);
itemd2.setIcon(image2);
itemd3.setIcon(image3);
itemd4.setIcon(image4);
//========================
itemd1.addActionListener( new ActionListener()
{ public void actionPerformed(ActionEvent e) {
try {
showEmployees();
} catch (Exception e1) {
e1.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
} });
}
//================================================
class QuitAction extends AbstractAction
{
public QuitAction() { super("Quit"); }
public void actionPerformed(ActionEvent e)
{
int response = JOptionPane.showConfirmDialog(Main_KHR.this, "Really Quit?");
if (response == JOptionPane.YES_OPTION) System.exit(0);
}
}
public void showEmployees() throws Exception {
DB.getConnection();
MyOfficeTreeResultDataSet();
formEmployees myform = new formEmployees(/*myDatabase*/);
myform.setSize(1024, 768);
myform.setVisible(true);
}
private void MyOfficeTreeResultDataSet() {
columnNames = new String[] {
"Id_Office", "OfficeName", "Id_Dept", "Department"};
data = DB.ExecQuery_OfficesTree();
}
public static Object[][] getMyTreeArray(){
return data;
}
}
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32832005
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего не прописан путь к JDBC-драйверу.
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32832831
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander2пока не нужно деталей, можешь рассказать в принципе что я делаю неправильно на первой форме (МЕНЮ)?
Спасибо за разрешение.

Забудем пока о том, КАК написан код.
Поговорим о том, что он делает не правильно...

Код: plaintext
1.
2.
            System.exit( 0 );
            DB.closeConnection();
Отлично. Сначала JVM прекратит свою работу, а потом снова запустится и закроет коннекшин?


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 public   void  actionPerformed(ActionEvent e) {
         try  {
             showEmployees();
        }  catch  (Exception e1) {
             e1.printStackTrace();  //To change body of cat
        }
}
В showEmplyees ты создаёшь коннекшин, обращаешься к БД с запросом, выполняешь какие-то манипуляции по инициализации formEmplyees и т.д. Всё это выполняется в потоке ивент диспатчера и следовательно GUI "застывает", пока всё выше перечисленное не завршится. Долгие операции и операции, которые могут быть за блокированы, должны выполняться в отдельном потоке.
Если у теюя DB написан через зад, то всё будет молча висеть.

Код: plaintext
1.
  if  (response == JOptionPane.YES_OPTION) System.exit( 0 );
То ты пытаешься закрыть коннекшин прежде чем выйти, то нет...
Нельзя так выходить, сам ведь понимаешь.

Вернёмся к тому КАК написан код.
Код написан - никак. Это вообще не код.
Мы ведь не на дельфи пишем... и даже не на ассемблере.
Зачем пихать data в main_khr, да ещё как static не понимаю.

Я потратил 15 минут на рефакторинг твоего кода и не большие исправления.

Сравни с исходным вариантом, какие мысли возникают?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
 import  javax.swing.*;
 import  java.awt.*;
 import  java.awt.event.WindowEvent;
 import  java.awt.event.WindowAdapter;
 import  java.awt.event.ActionEvent;
 import  java.awt.event.ActionListener;

 public   class  BootClass {
     public   static   void  main(String[] args) {
        Main_KHR mainmenu =  new  Main_KHR( new  OfficesTree());
        mainmenu.setSize( 400 ,  200 );

        DB.getConnection(); //brrr... bad solution. DB must be syncronized at least.
        mainmenu.addWindowListener( new  WindowAdapter() {
             public   void  windowClosing(WindowEvent e) {
                DB.closeConnection();
                System.exit( 0 );
            }
        });
        mainmenu.setVisible(true);
    }
}

 class  Main_KHR  extends  JFrame  implements  ActionListener {

     private  OfficesTree officesTree; //this is a wrong place for this variable.

     private  JMenuItem employeesItem;

     public  Main_KHR(OfficesTree officesTree) {
         super ("KHR Main Menu");

         this .officesTree = officesTree; //see above.

        JMenuBar menuBar =  new  JMenuBar();
        menuBar.add(createFileMenu());
        menuBar.add(createDatabaseMenu());

        getContentPane().setLayout( new  BorderLayout());
        setJMenuBar(menuBar);
    }

     private  JMenu createFileMenu() {
        JMenu fileMenu =  new  JMenu("File");
        fileMenu.add( new  AbstractAction("Quit") {
             public   void  actionPerformed(ActionEvent e) {
                 int  response = JOptionPane.showConfirmDialog(Main_KHR. this , "Really Quit?");
                 if  (response == JOptionPane.YES_OPTION) {
                    dispatchEvent( new  WindowEvent(Main_KHR. this , WindowEvent.WINDOW_CLOSED));
                }
            }
        });
         return  fileMenu;
    }

     private  JMenu createDatabaseMenu() {
        employeesItem =  new  JMenuItem("Employees", getImage("images/Employees.gif"));
        employeesItem.addActionListener( this );

        JMenuItem projectsItem =  new  JMenuItem("Projects", getImage("images/Projects.gif"));
        JMenuItem contractorsItem =  new  JMenuItem("Contractors", getImage("images/Contractors.gif"));
        JMenuItem libraryItem =  new  JMenuItem("Library", getImage("images/Library.gif"));

        JMenu databaseMenu =  new  JMenu("Databases");
        databaseMenu.add(employeesItem);
        databaseMenu.addSeparator();
        databaseMenu.add(projectsItem);
        databaseMenu.addSeparator();
        databaseMenu.add(contractorsItem);
        databaseMenu.addSeparator();
        databaseMenu.add(libraryItem);
         return  databaseMenu;
    }

     private  ImageIcon getImage(String fileName) {
         return   new  ImageIcon(getToolkit().createImage(fileName));
    }

     public   void  actionPerformed(ActionEvent e) {
        Object source = e.getSource();
         if  (source == employeesItem) {
             new  Thread() {
                 public   void  run() {
                    openNewEmployeesFrame();
                }
            }.start();
        }
    }

     public   void  openNewEmployeesFrame() {
         try  {
            officesTree.update(); //bad... officesTree must be moved to formEmplyees 
//or modified to singleton class.
            formEmployees myform =  new  formEmployees(/*myDatabase*/); 
            myform.setSize( 1024 ,  768 );
            myform.setVisible(true);
        }  catch  (Exception exception) {
            exception.printStackTrace();
        }
    }
}

 class  OfficesTree { //moved from KHR class
     private   final  String[] columnNames =  new  String[]{"Id_Office", "OfficeName", "Id_Dept", "Department"};
     private  Object[][] data;

     public   void  update() {
        //what about SQL exceptions?
        data = DB.ExecQuery_OfficesTree(); //Note about multithreading access to DB class.
    }

     public  Object[][] getMyTreeArray() {
         return  data;
    }
}
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32833110
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо, друг,

(в своем постинге я не РАЗРЕШИЛ тебе рассказать, а как раз спросил МОЖЕШЬ ли рассказать...это так к слову о полку Игореве).

ну если у меня даже в MainClass такие заморочки - то ессно и вызываемые формы не лучше, дык я знаю это!!!!
потому что беру готовые так называемые самплы из сановского титориала и пытаюсь сделать нечто работающее для моей задачи.

а вот по форме formEmployees у меня общий вопрос.

вот тут кусок конструктора

// ================C O N S T R U C T O R
public formEmployees() throws Exception {
BorderLayout myborderLayout = new BorderLayout();
contentPane = (JPanel)this.getContentPane();
contentPane.setLayout(myborderLayout);

JPanel top_NORTH = new JPanel();
// panel for Fast find + Employee Ststus + Edit-Browse action buttons
top_NORTH.setLayout(new SpringLayout());
//============================================================ //Put FastFind text box and the radio buttons into a panel.
group_FastFind = MyPaneFastFind(); // !!!!!!!!!!!!!!!!!!!!function
//============================================================ //Put the radio buttons in a line in a panel.
group_EStatus = MyPaneActiveEmployeeStatus(); // !!!!!!!!!!function
//========================================================== // Put the BIG buttons in a line in a panel.
group_Browse = MyPaneBigButtons(); // !!!!!!!!!function
//========================================================== // Create tabbed panel with filters panels
tb_Filters = MyLeftTabbedPane(); // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!function
//==========================================================
// populating left tabbed pane and right split pane with subpanels
split_main= MyMainSplitPane();
//========================================================== // populating top panel with subpanels
top_NORTH.add(group_FastFind);
top_NORTH.add(group_EStatus);
top_NORTH.add(group_Browse); //gBrowse_Box);

SpringUtilities.makeCompactGrid(top_NORTH, 1, top_NORTH.getComponentCount(), 6, 6, 6, 6);

status_main = new JPanel(); //--------<----------- Employee status panel

status_main.setMinimumSize(new Dimension (1200,100));
status_main.setMaximumSize(new Dimension (200,100));

Border border = BorderFactory.createEtchedBorder(Color.white, new Color(178, 178, 178));
status_main.setBorder(border);
status_main.setOpaque(true); // Make untrasparent background for the row

//=====================================================
// creating final form with TOP CENTER Status panels

contentPane.add(top_NORTH, BorderLayout.NORTH);
contentPane.add(split_main, BorderLayout.CENTER);
// Placing status raw on a panel
contentPane.add(status_main, BorderLayout.SOUTH);

//Display the window.
this.setTitle("Employees");
}
//======== E N D OF C O N S T R U C T O R

тут я раскидал создатель второстепенных панелей в функции, чтоб хоть как то навигироваться в этом коде иначе в конструкуторе ничего не найдешь сразу. Да и то чтоб найти - а что же я прописал на нажатие конпки на суббанели XXX приходится искать по всему коду эту чертову кнопку и событие к ней (согласись, что в дельфи - когда ты видишь кнопку и события с ней связанные - это гораздо-гораздо эффктивнее).

Но вопрос пока даже не к удобству кодирования, а к тому, что на моей форме многие контролы управляют содержимым моего грида, в котором я хочу показывать список работников. При смене состояния в группе стату работника - грид должен перестраиваться (то есть перевыполняться запрос на sql server), ну и так далее для все[ остальных компонентов. Так вот я сделал метод RefreshTable(), чтоб вызывать его при смене состояния кнопок.
Поначалу по неумению запихнул грид в простую панель - то есть у меня не появились скролбары, затем попробовал взять пример таблицы и скропанели с swing и нихрена теперь даже не выводится ни чего.

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

Как у меня в дельфи сделано - открывается пустая форма и пустой грид - указываю офис и грид наполняется содержимым без всяких кодирований - просто он завязан на датасет - который в случае перезапроса уже что-то содержит.

Так вот вопрос - можно ли показать пустой грид и только обновлять его содержимое вместо того, чтоб снова перекомпановывать эту скрол-панель под новое содержимое?


public void RefreshTable() {

// DefaultTableModel model = new DefaultTableModel();
// final JTable tableEmployees = new JTable(model);



columnNames = new String[] {
"FirstName", "LastName", "Department", "JobTitle","Office"};
e_data = DB.ExecStoredProc(myOffice, myDept, activeStatus); // Call stored procedure SpSelectEmployees3 from SQL SERVER

// tableEmployees.setAutoCreateColumnsFromModel(true);

//tableEmployees = new JTable(e_data, columnNames); // populating grid with data from result set = stored procedure SpSelectEmployees3

tableEmployees = new JTable(e_data, columnNames); // populating grid with data from result set = stored procedure SpSelectEmployees3


JTableHeader header = tableEmployees.getTableHeader();
tableEmployees.getTableHeader().resizeAndRepaint();

scrollPane.add(header, BorderLayout.NORTH); // Add header in NORTH slot
scrollPane.add(tableEmployees, BorderLayout.CENTER);

SelectionListener listener = new SelectionListener(tableEmployees);

tableEmployees.getSelectionModel().addListSelectionListener(listener);
tableEmployees.getColumnModel().getSelectionModel()
.addListSelectionListener(listener);
scrollPane.invalidate();
scrollPane.validate();
scrollPane.repaint();

/*
testPanel.invalidate();
testPanel.removeAll();
testPanel.add(header, BorderLayout.NORTH); // Add header in NORTH slot
testPanel.add(tableEmployees, BorderLayout.CENTER);
testPanel.validate();
testPanel.repaint();
testPanel.setPreferredSize(new Dimension(500, 70));
*/
tableEmployees.setPreferredScrollableViewportSize(new Dimension(500, 70));

//tableEmployees.addItemListener(new ItemListener() {
//
// });

if (true) {
tableEmployees.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
if (e.getClickCount() == 2)
{ Point p = e.getPoint();
int row = tableEmployees.rowAtPoint(p);
int column = tableEmployees.columnAtPoint(p); }
}
});
}
}
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32833116
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин взял и вставил твой код главного класса вместо того что было написано у меня - нихрена нетерь ничего не запускается

некий BootClass у тебя тут прописан - а что мне с ним делать?

раньше все хоть работало и показывалась главная форма меню :(
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32833123
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
короче, возвращаюсь я к своему разбитому корыту, хоть и худое но стирать можно....

блин, ничего хитрого я там не делал в моем главном классе!!!!!!!!!

расположил создание меню и прописал вызов других форм!!!!!!!!

все как в учебнике блин!!!!

а теперь даже эта форма не открывается!!!!
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32833366
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Естественно, если ты просто вставишь то, что я написал к себе - то проект не будет даже компилироваться. Я перенёс из этого класса данные и часть методов в другой класс. Соответственно все ссылки на них нужно изменить в остальном коде.
BootClass - это стартовый класс. Он инициализирует данные и показывает главное окошко.

Про твои вопросы...

1. Swing.
По экспериментируй просто с интефейсом. Забудь про базу данных.
По наполняй JTable "руками", уясни в чём смысл invalidate, validate. revalidate, repaint, выясни как работает JScrollPane и т.д.
Это что бы не возникало вопросов, почему рисуется/не рисуется до/после рефреша и т.п.

Могу сказать только совсем коротко:
- пока swing компоненты не стали "активны" (т.е. компонент стоящий в самом верху иерархии не стал видимым) - это просто объекты.
Ты можешь делать с ними всё что угодно и как угодно.
(Вызвать repaint для них бесполезно).
- когда они становятся активны, они попадают в область действия потока, занимающегося их прорисовкой и обработкой событий (мышь, кейбоард etc).
C этого момента работать с компонентами просто как с объектами уже нельзя.
Нужно что бы выполнялись определённые правила, иначе swing' поток будет отрисовывать компоненты не правильно, вплоть до возникновения в нём исключительных ситуаций.
Правила простые:
- модифицировать компоненты следует в потоке ивент диспатчера (не которые компоненты можно изменять когда попало, но прежде нужно свериться с документацией, что это безопасно).
- Если компонент был изменён, по окончанию всех изменений, нужно вызвать метод revalidate() (в awt это было два вызова invalidate, потом validate).
После этого компонент будет поставлен в очередь на перерисовку.
- начиная работать с каким-то компоненто нужно прочитать его javaDoc's. Их для того и пишут, что бы не было сомнений, как работать с jscrollpane и т.д.

2. Понятность кода :)
Ты смотришь на проблему очень узко.
Всё что ты пишешь - это просто гуи, в котором обработчики событий умещаются в один метод. В этом случае gui креатор, которые позволяет накидать "кнопочки" и быстро показать код, который будет выполняться при нажатии на них - это бог спустившийся на землю.

Но есть одно "маленькое" НО.

Как только логика перерастает быть тривиальной - помощь таких инструментов сходит на нет. И код, который ты станешь писать станет не читаемый, не модифицирумый и т.д. и т.п. Т.е. вылезут все те "минусы" о которых ты пишешь:

тут я раскидал создатель второстепенных панелей в функции, чтоб хоть как то навигироваться в этом коде иначе в конструкуторе ничего не найдешь сразу. Да и то чтоб найти - а что же я прописал на нажатие конпки на суббанели XXX приходится искать по всему коду эту чертову кнопку и событие к ней (согласись, что в дельфи - когда ты видишь кнопку и события с ней связанные - это гораздо-гораздо эффктивнее).

только никакое дельфи уже не может.

Если подходить с этих позиций, то в бога превращается java, посколько позволяет просто и понятно писать код (естественно нужно понимать принципы ооп, после добавления новой функциональности в код "прилизывать" его (читай рефакторить), что бы все элементы занимали нужное место и код не терял ясной структуры, переменным/методам/классам давать понятные названия и т.п. мелочи).
В принципе, ничто не мешает "так же хорошо" писать на других языках. Но java не засорён синтаксическими конструкциями затрудняющими понимание или опасными при не внимательном использовании. Но у других языков нет такого преимущества как кроссплатформенность и великолепные библиотеки.

^^^ это был злой пиар.

Я привёл в предыдущем посте свой вариант кода только для того, что бы показать, что то же самое что на писал ты, можно написать ясно и понятно.
Думаю любой, кто посмотрит 2 минуты на мой код - сразу скажет что и как он делает. А с твоим ему придётся разбираться минут 5. Хотя и там и там происходит одно и тоже.
...
Рейтинг: 0 / 0
Как сделать JAR в IntellJIDEA
    #32833532
Alexander2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще раз спасибо,
если бы все java программеры были такими терпимыми, то отношение к ней изменилось бы быстрее.

достал вот электронный бук OReilly.Java.Swing.2nd.2002.chm ~6 мег
очень полезная и хорошо сделанная вещица.
...
Рейтинг: 0 / 0
25 сообщений из 50, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Как сделать JAR в IntellJIDEA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]