[JFrame] Kod niedziała w JCreator, z NetBeans współpracuje.

0

Witam, skleciłem takie coś:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {



        Menu window = new Menu();
        window.setDefaultCloseOperation(Menu.EXIT_ON_CLOSE);
        window.setSize(200 , 500);
        window.setVisible(true);



    }


//--------------------------------------------------------
    //Definicja metod


    static void zadanie_1()
   { 
   ...
   }

   static void zadanie_2()
    { 
    ...
    }

...

   static void zadanie_9()
   { 
   ...
   }


    static class Menu extends JFrame
{
    // radiobuttony
    private JRadioButton radio1 = new JRadioButton("Zadanie 1"  , false);
    private JRadioButton radio2 = new JRadioButton("Zadanie 2"   , false);
    private JRadioButton radio3 = new JRadioButton("Zadanie 3", false);
    private JRadioButton radio4 = new JRadioButton("Zadanie 4"  , false);
    private JRadioButton radio5 = new JRadioButton("Zadanie 5" , false);
    private JRadioButton radio6 = new JRadioButton("Zadanie 6", false);
    private JRadioButton radio7 = new JRadioButton("Zadanie 7"   , false);
    private JRadioButton radio8 = new JRadioButton("Zadanie 8"   , false);
    private JRadioButton radio9 = new JRadioButton("Zadanie 9"   , false);
    private JRadioButton radio10 = new JRadioButton("Koniec"   , false);

    // przyciski
    private JButton m_wykonaj	= new JButton("Wybierz");


    // konstruktor
    public Menu()
    {
    	// panel glowny
        JPanel content = new JPanel();
        content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));

        // dodawanie radiobuttonow do grupy
        ButtonGroup bgroup = new ButtonGroup();
        bgroup.add(radio1);
        bgroup.add(radio2);
        bgroup.add(radio3);
        bgroup.add(radio4);
        bgroup.add(radio5);
        bgroup.add(radio6);
        bgroup.add(radio7);
        bgroup.add(radio8);
        bgroup.add(radio9);
        bgroup.add(radio10);


        // dodawanie radiobuttonow do nowego panelu
        JPanel radioPanel = new JPanel(new GridLayout(0, 1));
        radioPanel.add(radio1);
        radioPanel.add(radio2);
        radioPanel.add(radio3);
        radioPanel.add(radio4);
        radioPanel.add(radio5);
        radioPanel.add(radio6);
        radioPanel.add(radio7);
        radioPanel.add(radio8);
        radioPanel.add(radio9);
        radioPanel.add(radio10);

        // ramka
        radioPanel.setBorder(BorderFactory.createTitledBorder(
                   BorderFactory.createEtchedBorder(), "Wybierz..."));

        // tworzenie glownego panelu
        content.add(radioPanel, BorderLayout.LINE_START);
        content.add(m_wykonaj);
        this.setContentPane(content);
        this.pack();

        // nasluch zdarzenia
        m_wykonaj.addActionListener(new Wybor());

        // tytul
        this.setTitle("Labolatorium 1");
    }

    // nasluch zdarzenia
    class Wybor implements ActionListener
	{
        public void actionPerformed(ActionEvent e)
        {
        	// testowanie radiobuttonow
        	if (radio1.isSelected())
        		zadanie_1();
        	if (radio2.isSelected())
        		zadanie_2();
        	if (radio3.isSelected())
        		zadanie_3();
        	if (radio4.isSelected())
        		zadanie_4();
        	if (radio5.isSelected())
        		zadanie_5();
        	if (radio6.isSelected())
        		zadanie_6();
        	if (radio7.isSelected())
        		zadanie_7();
                if(radio8.isSelected())
        		zadanie_8();
        	if (radio9.isSelected())
        		zadanie_9();
                if (radio10.isSelected())
                        System.exit(0);


        }
    }
 }

 
}

  

Robiłem to w NetBeans i śmiga. Jedak gdy chcę skompilować w JCretor to wywala w General Output :

java.lang.NoClassDefFoundError: Menu
Caused by: java.lang.ClassNotFoundException: Menu
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: Menu.  Program will exit.
Exception in thread "main" 
Process completed.

Gdy usunę metody zadanie_x(); to działa, jednak same metody z zadaniami są poprawne (sterowanie zwykłym switch na JOptionPane.showInputDialog(); daje działający kod).

Pierwszy raz robie ręcznie coś na JFrame i JRadioButton i nie wiem czy to ja źle robie czy grymas JCreator ... W sumie z javy to raczkuje, więc nie wiem co tutaj może być nie tak.

Dodam ciekawą rzecz - jak zamienię kolejnością static class Menu exendes JFrame z metodami zadan to JCreator po kompilacji sypie na output :

Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)

where options include:
    -client   to select the "client" VM
    -server   to select the "server" VM
    -hotspot      is a synonym for the "client" VM  [deprecated]
                  The default VM is client.
                  
    -cp <class search path of directories and zip/jar files>
    -classpath <class search path of directories and zip/jar files>
                  A ; separated list of directories, JAR archives,
                  and ZIP archives to search for class files.
    -D<name>=<value>
                  set a system property
    -verbose[:class|gc|jni]
                  enable verbose output
    -version      print product version and exit
    -version:<value>
                  require the specified version to run
    -showversion  print product version and continue
    -jre-restrict-search | -jre-no-restrict-search
                  include/exclude user private JREs in the version search
    -? -help      print this help message
    -X            print help on non-standard options
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  enable assertions
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  disable assertions
    -esa | -enablesystemassertions
                  enable system assertions
    -dsa | -disablesystemassertions
                  disable system assertions
    -agentlib:<libname>[=<options>]
                  load native agent library <libname>, e.g. -agentlib:hprof
                    see also, -agentlib:jdwp=help and -agentlib:hprof=help
    -agentpath:<pathname>[=<options>]
                  load native agent library by full pathname
    -javaagent:<jarpath>[=<options>]
                  load Java programming language agent, see java.lang.instrument
    -splash:<imagepath>
                  show splash screen with specified image

Process completed.

Proszę o pomoc w doprowadzeniu tego kodu do używalności na JCreatorze.

0

Imo, zaczynanie programowania w Javie od korzystania z IDE jest chore. Na początek piszesz w Gedit, Notepad++,.. (a jak zupełnie zdesperowany to w Notatniku ;-) ). Potem kompilujesz w konsoli poleceniem javac. Jak byś to zrobił ze swoim kodem, to byś się dowiedział, że kod jest poprawny (można go skompilować) i polecenie java uruchamia działający program.
Morał, wyrzuć JCreatora na śmietnik.

0

Kod jest poprawy, w koncu sie skompilowal na netbeans. Problem w tym, ze MUSI dzialac przez JCreator.Chodzi mi o poprawnosc wzgledem implementacji powyższego ide.</b>

0

Najlepiej przenieś klasę Menu do oddzielnego pliku - może to pomoże, a będzie czytelniej ;)

0

To raczej nie ma znaczenia, poza tym na razie niemozliwe. Kod musi byc w jednym pliku i to kompilowany w JCreator.

0

A skąd takie wyamgania? To jakiś program na zaliczenie?

Sprawdziłem kod pod JCreator 3.5 LE w Windows XP na Javie 1.6:

Kod się kompiluje i uruchamia w JCreator.

0

Ta. Laborka. Cala zrobilem i chce dodatkowo gui zrobic, poza tym znajomosc javy sie przydaje. Piszac komercyjnie lub hobbystycznie nie bral bym sie za JCreator.

0

A jakich wersji ty używasz (OS,Java,JCreator)?

0

Kod jest poprawny. Jeśli się nie kompiluje w Twoim JCreatorze, to znaczy, że Twoja (uczelniana) wersja JCreatora jest do d**y. Jeśli uczelniana, to masz przechlapane, jeśli Twoja to zainstaluj na nowo.

0

XP sp3, JC 5.00.008, java 1.6.21.

Właśnie grzebie w bibliotece i odkryłem przerażającą rzecz. Gdy skompiluje program, po czym usunę z kodu metody z zadaniami i uruchomię, program startuje i wykonuje się poprawnie ! Gdy skompiluje bez funkcji z zadaniami, kompiluje się i nawet włącza - czyste gui co robi nic. Morał taki, że kompiluje poprawnie, tylko nie wiedząc dlaczego nie uruchamia skompilowanych plików gdy kod jest kompletny o_0. Pogrzebie jeszcze i sprawdze każdą metode z zadaniem, jak macie pomysły to zaproponujcie coś, ja w przeciągu 20 min przetestuje funkcje pod względem wywalania się JCreatora. Jeszcze bardziej mnie dobija jak JC ma kompilować program z podwójną deklaracją tej samej klasy to się krzaczy i tyle po ide ...

0

Prześlij pełny kod razem z tymi metodami.

0

OK. Uprzedzam, że kod jeszcze nie jest elegancki, chciałem go zrefaktoryzować znacząco, jednak zatrzymałem się na problemie z JCreator. Proszę się nie śmiać i nie kopiować kodu w celu jego rozpowszechnienia, czy użycia.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;



/**
 *
 * @author...
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {



        Menu window = new Menu();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setSize(200 , 500);
        window.setVisible(true);



    }


//--------------------------------------------------------
    //Definicja metod

  /**
     * Metoda czyta i wyswietla dane
     */
    
    static void zadanie_2()
    {
        //deklaracja zmiennych
        double f_wspA, f_wspB, f_wspC, f_delta, f_pierwiastek_podwojny, f_pierwiastek1, f_pierwiastek2;
        String str_buf;

      
        JOptionPane.showMessageDialog(null,"Obliczanie pierwiastkow rĂłwnania f(x)=ax^2+bx+c");

        //Wczytywanie współczynnika A i ...
        str_buf = JOptionPane.showInputDialog(null,"Wprowadz wpsłóczynnik A");
        f_wspA = Float.parseFloat(str_buf);


        //...zabezpieczenie przed wprowadzeniem rĂłwnaniem liniowym
        while(f_wspA==0)
        {
           str_buf = JOptionPane.showInputDialog(null, "Błędne równanie, wprowadz ponownie współcznynnik A");
           f_wspA = Float.parseFloat(str_buf);
        }

        //wprowadzenie reszty danych
        str_buf = JOptionPane.showInputDialog(null, "Wprowadz współcznynnik B");
        f_wspB = Float.parseFloat(str_buf);

        str_buf = JOptionPane.showInputDialog(null, "Wprowadz współcznynnik C");
        f_wspC = Float.parseFloat(str_buf);
        

        //Wywołanie funkcji obliczającej wyróżnik
        f_delta=delta(f_wspA,f_wspB,f_wspC);

        //Gdy delta jest .... to wykonaj ...
        if(f_delta<0)
            JOptionPane.showMessageDialog(null, "Nie ma pierwiastkĂłw rzeczywistych");

        else if(f_delta==0)
        {
           f_pierwiastek_podwojny=pierwiastekP(f_wspA,f_wspB);

           str_buf="Istnieje pierwiastek podwĂłjny : ";
           str_buf+=f_pierwiastek_podwojny;


           JOptionPane.showMessageDialog(null,str_buf);
           System.out.println("Istnieje pierwiastek podwĂłjny : "+f_pierwiastek_podwojny+"\n");
        }

       else
        {
           f_pierwiastek1=(((-f_wspB)-Math.sqrt(f_delta))/2*f_wspA);
           f_pierwiastek2=(((-f_wspB)+Math.sqrt(f_delta))/2*f_wspA);

           str_buf="Pierwiastek pierwszy : ";
           str_buf+=f_pierwiastek1;
           str_buf+="\nPierwiastek drugi : ";
           str_buf+=f_pierwiastek2;


           JOptionPane.showMessageDialog(null,str_buf);
           System.out.println("Pierwiastek pierwszy : "+f_pierwiastek1+"\nPierwiastek drugi : "+f_pierwiastek2);

        }

     }
    static double delta(double f_wspA, double f_wspB, double f_wspC)
    {
        return ((Math.pow(f_wspB,2))-(4*f_wspB*f_wspC));
    }
	static double pierwiastekP(double f_wspA,double f_wspB)
    {
        return ((-f_wspB)/(2*f_wspA));
    }
  
    static class Menu extends JFrame
{
    // radiobuttony
    private JRadioButton radio1 = new JRadioButton("Zadanie 1"  , false);
    private JRadioButton radio2 = new JRadioButton("Zadanie 2"   , false);
    private JRadioButton radio3 = new JRadioButton("Zadanie 3", false);
    private JRadioButton radio4 = new JRadioButton("Zadanie 4"  , false);
    private JRadioButton radio5 = new JRadioButton("Zadanie 5" , false);
    private JRadioButton radio6 = new JRadioButton("Zadanie 6", false);
    private JRadioButton radio7 = new JRadioButton("Zadanie 7"   , false);
    private JRadioButton radio8 = new JRadioButton("Zadanie 8"   , false);
    private JRadioButton radio9 = new JRadioButton("Zadanie 9"   , false);
    private JRadioButton radio10 = new JRadioButton("Koniec"   , false);

    // przyciski
    private JButton m_wykonaj	= new JButton("Wybierz");


    // konstruktor
    public Menu()
    {
    	// panel glowny
        JPanel content = new JPanel();
        content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));

        // dodawanie radiobuttonow do grupy
        ButtonGroup bgroup = new ButtonGroup();
        bgroup.add(radio1);
        bgroup.add(radio2);
        bgroup.add(radio3);
        bgroup.add(radio4);
        bgroup.add(radio5);
        bgroup.add(radio6);
        bgroup.add(radio7);
        bgroup.add(radio8);
        bgroup.add(radio9);
        bgroup.add(radio10);


        // dodawanie radiobuttonow do nowego panelu
        JPanel radioPanel = new JPanel(new GridLayout(0, 1));
        radioPanel.add(radio1);
        radioPanel.add(radio2);
        radioPanel.add(radio3);
        radioPanel.add(radio4);
        radioPanel.add(radio5);
        radioPanel.add(radio6);
        radioPanel.add(radio7);
        radioPanel.add(radio8);
        radioPanel.add(radio9);
        radioPanel.add(radio10);

        // ramka
        radioPanel.setBorder(BorderFactory.createTitledBorder(
                   BorderFactory.createEtchedBorder(), "Wybierz..."));

        // tworzenie glownego panelu
        content.add(radioPanel, BorderLayout.LINE_START);
        content.add(m_wykonaj);
        this.setContentPane(content);
        this.pack();

        // nasluch zdarzenia
        m_wykonaj.addActionListener(new Wybor());

        // tytul
        this.setTitle("Labolatorium 1");
    }

    // nasluch zdarzenia
    class Wybor implements ActionListener
	{
        public void actionPerformed(ActionEvent e)
        {
        	// testowanie radiobuttonow
        	if (radio1.isSelected())
        		zadanie_1();
        	if (radio2.isSelected())
        		zadanie_2();
        	if (radio3.isSelected())
        		zadanie_3();
        	if (radio4.isSelected())
        		zadanie_4();
        	if (radio5.isSelected())
        		zadanie_5();
        	if (radio6.isSelected())
        		zadanie_6();
        	if (radio7.isSelected())
        		zadanie_7();
            if (radio8.isSelected())
        		zadanie_8();
        	if (radio9.isSelected())
        		zadanie_9();
            if (radio10.isSelected())
                System.exit(0);


        }
    }
 }

 
}

  



Usunąłem metody z którymi działa. Generalnie krzaczy metoda zadanie_2(); Metody delta i pierwiastek nie robią kłopotu jednak zadanie_2(); ich wymaga. Co jest w tej metodzie nie tak ?

0

Skompliowałem ten kod w Jcreatorze 3.5 LE i jest ok - wszystko działa bez zarzutu. Może zainstaluj inną wersję JC?

0

Generalnie na JCreatorze 3.5 LE działa, natomiast na 4.5LE i 5.0Pro nie. Nie mam pojęcia jak to możliwe skoro wszystkie te 3 programy działają u mnie na tym samym jdk .... Jutro idę na konsultacje, bo program kompilowany będzie na JC 4.5LE, tak czy inaczej macie pomysł, dlaczego na tych nowych nie działa ? ( NetBeans nowy i samo jdk to chwytają).

0

Witam !

Postanowiłem podbić, ponieważ po zlokalizowaniu jakiegoś błędu właśnie w metodzie zadanie_2() poszedłem do prowadzącego, i nie wiem co gościa podkusiło, ale zrobił parę dziwnych rzeczy i wychaczył błąd. Postanowiłem się z wami tym podzielić, ponieważ jest on tak śmieszny, że aż tragiczny ...

Generalnie pisząc w NetBeans pisałem komenty w języku polski. Po skopiowaniu do JCreator znaki dialektyczne się wykrzaczyły.

Przyczyną było "ó" w komencie, a właściwie po przekopiowaniu to zamiast "ó" było "Ăł". JCreator niezależnie od kompilatora parsuje kod źródłowy żeby dodać wszystkie klasy i metody do okna class view, i wysypywał się na "Ăł". Jedyna klasa jaką wciągał to menu. Po kompilacji mamy wszystkie klasy, ponieważ kompilator działa niezależnie, jednak przy włączaniu, JCreator podawał do JDK klase menu, bo innej nie miał i z tąd ten błąd.

Wszystko to wina od 2 wersji nie poprawionego błędu z parsowaniem kodu źródłowego. Tak jak by ktoś miał podobny problem, lub chciał się pośmiać z programistów JCreatora hehe ... naprawdę padłem jak się o tym dowiedziałem. Jeszcze nigdy przez komentarz nie miałem problemów z programem.

0

W prehistorycznych czasach (tzn. bez Eclipse i NetBeans) wpisałem JCreator na listę programów "nieużywalnych". Przyczyny były dwie:

  • od czasu do czasu dostawałem programy, których autorzy używali polskich liter w nazwach klas, metod i zmiennych, JCreator tego nie tolerował,
  • mogę trochę mieszać, ale mniej więcej było tak: program składa się z dwóch klas A i B, klasa A korzysta z klasy B, klasa B została zmieniona, kompilujemy ją, klasa A korzysta nadal ze starej wersji klasy B, żeby skorzystała z nowej, trzeba skompilować klasę A.
0
bo napisał(a)

W prehistorycznych czasach (tzn. bez Eclipse i NetBeans) wpisałem JCreator na listę programów "nieużywalnych". Przyczyny były dwie:

  • od czasu do czasu dostawałem programy, których autorzy używali polskich liter w nazwach klas, metod i zmiennych, JCreator tego nie tolerował,
  • mogę trochę mieszać, ale mniej więcej było tak: program składa się z dwóch klas A i B, klasa A korzysta z klasy B, klasa B została zmieniona, kompilujemy ją, klasa A korzysta nadal ze starej wersji klasy B, żeby skorzystała z nowej, trzeba skompilować klasę A.

Obecnie nie doszedłem do tego dlaczego, ale nie zawsze kompilacja pomaga. Najbezpieczniej usunąć skompilowane klasy i od nowa projekt budować. Gdyby były w laboratorium lepsze maszyny to bym pisał w NetBeansie .. ech ...

1 użytkowników online, w tym zalogowanych: 0, gości: 1