Pessoal to com uma duvida onde não consigo extender uma classe Java que eu mesmo criei. Quando o chega na linha que herda a classe Atleta ocorre o erro.
Fiz alguns testes, consegui utilizar como por exemplo a classe java.io.OutputStream, mas com a minha não consegui.
Segue a classe:
[code]require ‘java’
class Maratonista < java.monografia.Atleta
def maratonista
puts 'TESTE’
end
end[/code]
Segue o erro:
Exception in thread "main" C:/New Folder/Monografia/../Monografia/ruby/Maratonista.rb:3:in `method_missing': cannot load Java class java.Atleta (NameError)
from C:/New Folder/Monografia/../Monografia/ruby/Maratonista.rb:3:in `C:/New Folder/Monografia/../Monografia/ruby/Maratonista.rb'
from C:/New Folder/Monografia/../Monografia/ruby/Maratonista.rb:1
...internal jruby stack elided...
Java Result: 1
Pessoal desculpem mas já consegui resolver. O erro foi causado na chamada ao método maratonista, fatou uma conversão no Java. Um (IRubyObject).
Grato!
Desculpem mais ainda tenho uma dúvida:
Estou com um pequeno programa JRuby. Não estou conseguindo instanciar dentro do Java a forma correta do construtor Ruby.
Fico agradecido por aqueles que poderem ajudar.
Java chamando Ruby:
public class Main{
public static void main(String[] args){
List path = new ArrayList();
path.add("../Monografia/ruby/");
String arquivo = "Maratonista";
Ruby rubyRuntime = JavaEmbedUtils.initialize(path);
rubyRuntime.getLoadService().load(arquivo+".rb", false);
Object objetoRuby = rubyRuntime.evalScriptlet("Maratonista.new('Anderson',29)");
Atleta atleta = (Atleta)JavaEmbedUtils.rubyToJava(rubyRuntime,(IRubyObject) objetoRuby, Atleta.class);
System.out.print("Resultado: "+atleta);
}
}
Classe Ruby:
class Maratonista < Java::monografia::Atleta
@nome
@idade
def initialize nome, idade
@nome = nome
@idade = idade
end
def get_nome
@nome
end
def get_idade
@idade
end
end
E por fim segue o erro:
Exception in thread "main" file:/C:/New Folder/Monografia/lib/jruby.jar!/builtin/javasupport/utilities/base.rb:24:in `__jcreate!': wrong # of arguments for constructor (NameError)
from file:/C:/New Folder/Monografia/lib/jruby.jar!/builtin/javasupport/proxy/concrete.rb:7:in `new'
from <script>:1
...internal jruby stack elided...
Java Result: 1
Essa sua classe Atleta deve ter um construtor igual ao da classe Maratonista, que recebe o nome e a idade.
http://jira.codehaus.org/browse/JRUBY-2457
Oi Mauricio,
Obrigado pela força. Fiz a modificação e não funcionou acho que ficou em cach, quando tentei depois ai funcionou.
Obrigado mesmo!