🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.ruby
7 messages
7 total messages Started by gierlasinski Sat, 28 Apr 2007 15:47
JRuby - jak zacząć ?
#476
Author: gierlasinski
Date: Sat, 28 Apr 2007 15:47
22 lines
2255 bytes
Witam.

Kilka miesięcy temu zainteresowałem się cudem jakim jest JRuby.
Pierwszą wersja z jaką miałem przyjemność pracować była 0.9.2. W
zasadzie rozpakowanie wersji bin i ustawienie zmiennych środowiskowych
(JAVA_HOME, JRUBY_HOME, Path) wystarczało do pracy interpretera. Po
wyjściu JRuby 0.9.8 zacząłem bawić się w kompilację pod ant. No i niby
ant test dało oczekiwany rezultat i kompilacja zakończyła się
powodzeniem. I wtedy zacząłem tworzyć swoje pierwsze dzieło :) Aż tu
jakiś tydzien temu pojawiła się wersja 0.9.9... Podczas kompilacji
źródła wywaliło mi błęda :/ No więc myślałem, że chociaż rozpakowanie
"gotowca" jruby-bin-0.9.9.tar.gz pozwoli na pracę... a tu nic :/ Niby
aplikacje w samples działają w interpreterze ale moja (która pod 0.9.8
chulała) już cosik nie bardzo... Dostaje taki oto błąd:

http://img443.imageshack.us/img443/9646/errorne2.jpg

Moja prośba jest następująca: czy ktoś mógłby krótko objaśnić co po
kolei należy zrobić aby skompilować pliczek *.rb do *.jar w JRuby ^^
(tylko tak w miarę prosto no jak dla debila niekumatego :P )

Dzięki z góry.
Re: JRuby - jak zacząć ?
#477
Author: gierlasinski
Date: Sun, 29 Apr 2007 09:26
32 lines
1610 bytes
Dodam tylko, że jeden z błędów dotyczy poniższego kodu:

class Main < JFrame

	def initialize

		super("Okno glowne")

		setDefaultCloseOperation(JFrame::EXIT_ON_CLOSE)


#linia 45 w main.rb   panel_dane = DanePanel.new

                (...)
        end

end


class DanePanel < JPanel

  def initialize

    super

      (...)

   end

end

:/
Re: JRuby - jak zacząć ?
#478
Author: Marcin Mielżyński
Date: Mon, 30 Apr 2007 10:35
43 lines
1735 bytes
gierlasinski@gmail.com wrote:

> chulała) już cosik nie bardzo... Dostaje taki oto błąd:
> 
> http://img443.imageshack.us/img443/9646/errorne2.jpg

Za mało informacji, w każdym razie to działa:

require 'java'

JFrame = javax.swing.JFrame
JPanel = javax.swing.JPanel

class Main < JFrame

    def initialize
    	super("Okno glowne")
	setDefaultCloseOperation(JFrame::EXIT_ON_CLOSE)
	add DanePanel.new
    end

end


class DanePanel < JPanel

   def initialize
     super
   end

end

Main.new.show


> 
> Moja prośba jest następująca: czy ktoś mógłby krótko objaśnić co po
> kolei należy zrobić aby skompilować pliczek *.rb do *.jar w JRuby ^^

http://www.headius.com/jrubywiki/index.php/JRuby_Compiler


lopex
Re: JRuby - jak zacząć ?
#479
Author: gierlasinski
Date: Mon, 30 Apr 2007 20:24
199 lines
6903 bytes
>Za mało informacji

W zasadzie w tym kodzie nie ma nic specjalnego. Po prostu tworzę swoją
klasę z panelem a następnie obiekt tej klasy i doklejam go do panelu
głównego. To co zawarte jest w kodzie to jedynie szereg komponentów
rozmieszczanych wg różnych layoutów. Jeśli usunę linijkę, w której
panel jest tworzony (panel_dane = DanePanel.new) błąd znika. Program
jest dość rozbudowany jednak obiekt typu DanePanel jest tworzony tylko
w tym jednym miejscu więc dokładnie w kawałku poniższego kodu gdzieś
tkwi błąd a ja nie mam pojęcia gdzie (zważywszy, że pod 0.9.8 to
działa... :/ )

class Main < JFrame

	def initialize

		super("Okno glowne")

		setDefaultCloseOperation(JFrame::EXIT_ON_CLOSE)

                menu = MenuGlowne.new

		zakladki = JTabbedPane.new

		panel_dane = DanePanel.new          #PO WYWALENIU TEJ LINII BLAD
ZNIKA :|
		$panel_fcfs = FCFSPanel.new
		$panel_sjf = SJFPanel.new
		$panel_srtf = SRTFPanel.new
		$panel_hrrn = HRRNPanel.new
		$panel_rr = RRPanel.new


                zakladki.add("Dane", panel_dane)
		zakladki.add("FCFS", $panel_fcfs)
		zakladki.add("SJF", $panel_sjf)
		zakladki.add("SRTF", $panel_srtf)
		zakladki.add("HRRN", $panel_hrrn)
		zakladki.add("RR", $panel_rr)

                setContentPane(zakladki)
                setJMenuBar(menu)
                setVisible(true)

  end

end


class DanePanel < JPanel

  def initialize

    super

    $tab = Array2D.new
    $label = Array.new
    $checkbox_usun = Array.new
    $p = Array.new

    panel_dane_center = JPanel.new(nil)
 
panel_dane_center.setBorder(BorderFactory.createLineBorder(Color.lightGray))

    mov_y = 20    #przesuniecie etykiet od gory ekranu

    pLp = JLabel.new("Lp.")
    pLp.setBounds(20,mov_y,30,30)
    panel_dane_center.add(pLp)

    pNazwa = JLabel.new("Nazwa")
    pNazwa.setBounds(100,mov_y,120,30)
    panel_dane_center.add(pNazwa)

    pPrzybycie = JLabel.new("Czas przybycia")
    pPrzybycie.setBounds(200,mov_y,120,30)
    panel_dane_center.add(pPrzybycie)

    pDlugosc = JLabel.new("Dlugosc")
    pDlugosc.setBounds(330,mov_y,120,30)
    panel_dane_center.add(pDlugosc)

 
#=======================================================================================
    #   pola do wprowadzania danych
 
#=======================================================================================

      (0..$max_procesow-1).each do |y|      #ustawiamy dany wiersz...

               $label[y] = nowaEtykieta(y)
               panel_dane_center.add($label[y])

               if y>0 then $label[y].setVisible(false) end

              $checkbox_usun[y] = nowyCheckBox(y)
              panel_dane_center.add($checkbox_usun[y])

              if y>0 then $checkbox_usun[y].setVisible(false) end

              (0..2).each do |x|                      #dla pol
edycyjnych (3 na dany wiersz) musimy przeleciec przez kolumny (x)
                  $tab[y][x] = nowyProces(y,x)
                  panel_ dane_center.add($tab[y][x])

                  if y>0 then $tab[y][x].setEditable(false) end

             end

    end

    $uzupelnianie = JCheckBox.new("Autouzupelnianie", false)

    panel_right = JPanel.new
    panel_right.setLayout(GridBagLayout.new)

    c = GridBagConstraints.new

    c.fill = GridBagConstraints::HORIZONTAL

    c.insets = Insets.new(20,12,10,12)
    $db = JLabel.new("Baza: #{$current_file}")
    c.gridx = 0
    c.gridy = 0
    panel_right.add($db, c)

    c.insets = Insets.new(4,12,4,12)

    bOk = JButton.new("Akceptuj")
    bOk.setToolTipText("Zapisz parametry procesow")
    bOk.addActionListener(DodajDaneButtonClick.new)
    c.gridx = 0
    c.gridy = 1
    panel_right.add(bOk, c)

    bOtworz = JButton.new("Otworz")
    bOtworz.setToolTipText("Pobierz dane z pliku")
    bOtworz.addActionListener(OtworzPlikButtonClick.new)
    c.gridx = 0
    c.gridy = 2
    panel_right.add(bOtworz, c)

    bZapisz = JButton.new("Zapisz")
    bZapisz.setToolTipText("Zapisz dane")
    bZapisz.addActionListener(ZapiszButtonClick.new)
    c.gridx = 0
    c.gridy = 3
    panel_right.add(bZapisz, c)

    bZapiszJako = JButton.new("Zapisz jako")
    bZapiszJako.setToolTipText("Zapisz dane do pliku")
    bZapiszJako.addActionListener(ZapiszJakoButtonClick.new)
    c.gridx = 0
    c.gridy = 4
    panel_right.add(bZapiszJako, c)

    bUsun = JButton.new("Usun")
    bUsun.setToolTipText("Usun rekordy z procesami")
    bUsun.addActionListener(UsunWierszButtonClick.new)
    c.gridx = 0
    c.gridy = 5
    c.insets = Insets.new(20,12,4,12)
    panel_right.add(bUsun, c)

    $lista = JComboBox.new
    $lista.addItem("Puste")
    $lista.addItem("Zaznaczone")
    $lista.addItemListener(TrybUsuwania.new)
    c.gridx = 0
    c.gridy = 6
    c.insets = Insets.new(4,12,4,12)
    panel_right.add($lista, c)

    setLayout(BorderLayout.new)

    add("Center", panel_dane_center)
    add("South", $uzupelnianie)
    add("East", panel_right)

  end

end

~~~~~~~~~~~~~~~~~~~~~~~~~~
Jeśli chodzi natomiast o kompilator - tak, pisze tam wszystko wyraźnie
ale... Jrubyc jest skryptem pod linuxa a odpowiednik "jruby -C" chyba
nie za bardzo lubi swinga i daje takie oto wyniki:

D:\jruby-0.9.9\samples>jruby -C swing.rb

Error - Not compileable: Can't compile node: Colon2Node [ConstNode
[JFrame]EXIT_ON_CLOSE]

D:\jruby-0.9.9\samples>jruby -C swing2.rb

Error - Not compileable: Can't compile node: ClassNode [Colon2Node
[ClickAction]]

Ehh chyba porwałem się z motyką na księżyc z tym JRuby... :(
Re: JRuby - jak zacząć ?
#480
Author: Marcin Mielżyński
Date: Tue, 01 May 2007 18:08
32 lines
1963 bytes
gierlasinski@gmail.com wrote:

> 
> 		panel_dane = DanePanel.new          #PO WYWALENIU TEJ LINII BLAD
> ZNIKA :|

Sprobój ponownie sprawdzić arność superkonstruktora DanePanel (jeśli 
problem nie zniknie, pozostaje kompilacja z trunka - ostatnio pojawiło 
się kilka patchy związanych z java-integration)

> D:\jruby-0.9.9\samples>jruby -C swing.rb
> 
> Error - Not compileable: Can't compile node: Colon2Node [ConstNode
> [JFrame]EXIT_ON_CLOSE]
> 
> D:\jruby-0.9.9\samples>jruby -C swing2.rb
> 
> Error - Not compileable: Can't compile node: ClassNode [Colon2Node
> [ClickAction]]
> 

jeszcze nie wszystkie węzły AST są obsłużone przez kompilator, będą 
dopiero po 1.0 (w tej chwili z opcją -Djruby.jit.enabled=true jruby 
skompiluje te węzły które są obsługiwane - ale zrobi to w locie, nie do 
*.class)

> Ehh chyba porwałem się z motyką na księżyc z tym JRuby... :(
> 

No cóż, projekt cały czas się rozwija :D

lopex
Re: JRuby - jak zacząć ?
#481
Author: gierlasinski
Date: Sat, 05 May 2007 14:58
6 lines
1631 bytes
To ja może pójdę za ciosem i zapytam o jeszcze jedną rzecz - w jaki
sposób dołączyć własną klasę napisaną w Javie (czy to ma być w postaci
pliku *.class czy *.jar i czy ten owy plik powinien znajdować się w
katalogu z programem czy w podkatalogach jak to w Javie jest).

Pozdrawiam.
Re: JRuby - jak zacząć ?
#482
Author: Marcin Mielżyński
Date: Mon, 07 May 2007 10:13
59 lines
2913 bytes
gierlasinski@gmail.com wrote:
> To ja może pójdę za ciosem i zapytam o jeszcze jedną rzecz - w jaki
> sposób dołączyć własną klasę napisaną w Javie (czy to ma być w postaci
> pliku *.class czy *.jar i czy ten owy plik powinien znajdować się w
> katalogu z programem czy w podkatalogach jak to w Javie jest).
> 
> Pozdrawiam.
> 

Jeśli klasa jest w CLASSPATH (zip, jar, klasa, cokolwiek) to powinna być 
dostępna od strzału, można też użyć require jara. Pakiety org i com są 
dostępne domyślnie (inne trzeba kwalifikować przez Java::jakis_pakiet. ..)
W integracji java/ruby jest przyjętych kilka konwencji pozwalających na 
tworzenie bardziej rubicznego kodu, np:

metody camel case (np: cosTam) można wołać jako cos_tam,
publiczne settery i gettery są dostępne jako atrybuty:

class X {
	private int a;
	public void setA(int a) {
		this.a = a;
	}
	public int getA() {
		return a;
	}
	public boolean isEven() {
		return (a & 1) == 0;
	}
}
x = X.new
x.a = 4  	# woła setter
p x.a    	# woła getter
p x.even? 	# woła predykat isEven


Dla dalszego ułatwienia integracji wiele klas jrubiego implementuje 
standardowe interfejsy z java.util, np: RubyArray implementuje 
java.util.List, RubyHash implementuje java.util.Map. Domyślnie metody 
tych interfejsów dokonują autokonwersji z typów javowych na rubiczne i 
odwrotnie.

np: java.util.ArrayList.new([1,2,3]).each{|e|p e}

Dziedziczenie, implementacja interfejsów, itp, są bardzo dobrze opisane 
przy okazji jednego z ostatnich patchy: 
http://jira.codehaus.org/browse/JRUBY-903


Dla przykładu uruchomienie jythona sprowadza się do:


require 'java'		# od 1.0: require Java
require 'jython'

org.python.util.PythonInterpreter.new.exec 'print "hello from Python!"'


lopex
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads