Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запуск Groovy скрипта из java кода, без жестких ссылок на файл скрипта 
:(
    Опции темы
Saboteur
Дата 20.3.2009, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Эндрю Гловер в своей статье - Практически Groovy : Подмешайте немного Groovy в приложения Java приводит пачку примеров для запуска, парсинга, компиляции Groovy скриптов из java-кода. Воот таки образом:
Код

package com.vanward.gembed;

import java.io.File;
import groovy.lang.GroovyShell;

public class ShellRunEmbedGroovy{

 public static void main(String args[]) throws Throwable{
                        
  String[] path = {"C:\\music\\temp\\mp3s"};        
  GroovyShell shell = new GroovyShell();
  shell.run(new File("C:\\dev\\groovy-embed\\src\\groovy\\
    com\\vanward\\groovy\\Songs.groovy"), 
    path);
 }
}

Программа небольшая. Пяток классов да один грувискрипт.
Я собираюсь использовать JSmooth для создания экзешника (не хочу заморачивать юзверя).
Как можно обойтись без жестких ссылок в этой ситуации?
П.С. вот ссылка на api класса GroovyShell.
Мне нужно получить либо ImputStrim либо File.

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


software saboteur
****


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

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



положить файл в jar и обращаться к нему как к ресурсу. В этой теме было описано как это сделать.


--------------------
user posted image нет времени думать - нужно писать КОД!

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


Новичок



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

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



о! Спасибо!  smile 
PM MAIL ICQ   Вверх
platonos
Дата 29.3.2017, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот код:
Код

//d.groovy
//package com.vanward.gembed
import groovy.swing.SwingBuilder
import javax.swing.*
import java.awt.FlowLayout
import java.io.File;
import groovy.lang.GroovyShell
//public class ShellRunEmbedGroovy{
//public static void main(String args) throws Throwable{                      
  String[] path = {"C:\\Groovy"}        
  GroovyShell shell = new GroovyShell()
  shell.run(new File("C:\\Groovy\\chisla.groovy"), path)
//}}
    swinger = new SwingBuilder()
      gui = swinger.frame(title: "Арабские << >> Римские", size: [380, 120]) {
        panel(layout: new FlowLayout()) {
        panel(layout: new FlowLayout()) {
          message1 = textField(columns: 12)
          button = swinger.button(text: 'Вычислить', actionPerformed: {
                    JOptionPane.showMesдsageDialog(gui, ArabRim(message1.text as Integer))
})         
          button = swinger.button(text: 'Очистить', actionPerformed: {         
                    message1.selectAll()
                    message1.cut()         
})}
          message2 = textField(columns: 12)
          button = swinger.button(text: 'Вычислить', actionPerformed: {
                   JOptionPane.showMessageDialog(gui, RimArab(message2.text))
})
          button = swinger.button(text: 'Очистить', actionPerformed: {         
                    message2.selectAll()
                    message2.cut()         
})}}
gui.show()

Вот файл 
Код

//chisla.groovy
def ArabRim (Arab) {
List Rim = [ "I", "V", "X", "L", "C", "D", "M"]
A = Arab.reverse(); i = 0; L = []
for( v in A){ x = v /* as Integer*/; iI = i*2; iV = 2*i+1; iX = 2*i+2
              switch (x){
                  case 4: r = Rim[iI] + Rim[iV]; break
                  case 9: r = Rim[iI] + Rim[iX]; break
                  case 1..3: r  = ""; for( int j = 0; j < x;  j++){ r  = r  + Rim[iI]}; break
                  case 5..8: r2 = ""; x1 = x - 5; for( int j = 0; j < x1; j++){ r2 = r2 + Rim[iI]}; r1 = Rim[iV]; r = r1 + r2; break
                  case 0: r = ""; break
                        }; ++i; L = L + r}
S = L.reverse().join(); return S
                  }
def RimArab (Rim) {
Map rimArab = [ "I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000]
f = Rim.replace("IV", "IIII").replace("IX", "VIIII").replace("XL", "XXXX").replace("XC", "LXXXX").replace("CD", "CCCC").replace("CM", "DCCCC")
Arab = 0; for(i in f) { Arab = Arab + rimArab[i]}; return Arab
                  }

Как видно, я пытаюсь сделать так, что бы chisla.groovy загружался в d.groovy и можно было вызывать методы ArabRim и RimArab и применять их к соответствующим полям редактирования...
При нажатии первой кнопки 'Вычислить' пишется ошибка:
Exception in thread "AWT-EventQueue-0" 
groovy.lang.MissingMethodException: No signature of method: d.ArabRim() is applicable for argument types: (java.lang.Integer) values: [4]

При нажатии второй:
Exception in thread "AWT-EventQueue-0" 
groovy.lang.MissingMethodException: No signature of method: d.RimArab() is applicable for argument types: (java.lang.String) values: [IV]
В чём состоит проблема и как её исправить...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Groovy & Grails | Следующая тема »


 




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


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

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