0

Griffon in Action bookの段落 3.6.1 に、mortageCalc アプリケーションの演習があります。

環境:

  • 勝利 7 プロ、64 ビット
  • IntelliJ IDEA バージョン 12.1
  • グリフォン-1.2.0 JDK 1.6

私はMortgageCalViewを持っています:

package mortgagecal

application(title:'Mortgage Calculator', pack:true, locationByPlatform:true)
        {
            panel(border: emptyBorder(6)) {
                gridLayout(rows:4, columns:2, hgap:6, vgap:6)
                label('Principal:')
                textField(text: bind(target:model, 'principal',
                        value:'$200,000',
                        validator: model.validatePrincipal,
                        converter: model.convertPrincipal))
                label('Interest Rate:')
                textField(text: bind(target:model, 'monthlyRate',
                        value:'6.5%',
                        validator: model.validateRate,
                        converter: model.convertRate))
                label('Term:')
                textField(text: bind(target:model, 'months',
                        value:'30',
                        validator: model.validateTerm,
                        converter: model.convertTerm))
                label('Monthly Payment (P&I):')
                textField(editable:false,
                        text: bind(source: model, sourceProperty: 'payment',
                                sourceEvent: 'propertyChange',
                                converter: model.convertPayment))
            }
        }

およびMortgageCalModel :

package mortgagecal

import groovy.beans.Bindable
import java.text.NumberFormat
import java.text.DecimalFormat

@Bindable
class MortgageCalModel {
    float principal
    float monthlyRate
    float months
    float getPayment() {
        return principal * monthlyRate /
                (1-Math.pow(1/(1+monthlyRate),months))
    }
    private currencyFormat = NumberFormat.currencyInstance
    private percentFormat = new DecimalFormat('0.00%')
    def validatePrincipal = {
        try {
            float principal = currencyFormat.parse(it)
            return principal > 0
        } catch (Exception e) {
            return false
        }
    }
    def convertPrincipal = currencyFormat.&parse
    def validateRate = {
        try {
            float rate = percentFormat.parse(it)
            return rate > 0 && rate < 0.30
        } catch (Exception e) {
            return false
        }
    }
    def convertRate = {
        return percentFormat.parse(it) / 12
    }
    def validateTerm = {
        try {
            def term = Float.parseFloat(it)
            return term > 0 && term < 100
        } catch (Exception e) {
            return false
        }
    }
    def convertTerm = {
        return Float.parseFloat(it) * 12
    }
    def convertPayment = {
        return currencyFormat.format(it)
    }
}

実行すると、次のエラーが表示されます。

キャッチ: groovy.lang.MissingMethodException: メソッドの署名がありません: モーゲージカル.モーゲージカルビュー.アプリケーション() は、引数の型に適用されます: (java.util.LinkedHashMap, モーゲージカル.モーゲージカルビュー$_run_closure1) 値: [[タイトル:住宅ローン計算機, パック: true、locationByPlatform:true]、...] groovy.lang.MissingMethodException: メソッドの署名がありません: モーゲージカル.モーゲージカルビュー.アプリケーション() は、引数の型に適用されます: (java.util.LinkedHashMap、モーゲージカル.モーゲージカルビュー$_run_closure1) 値: [[title:Mortgage Calculator, pack:true, locationByPlatform:true], ...] mortagecal.MortgageCalView.run(MortgageCalView.groovy:3) で

しかし、コマンド プロンプトで実行すると、問題なく動作します。

cd D:\work\griffon\mortgageCal> 
griffon run-app

だから、私のIntelliJには問題があります...

4

1 に答える 1

0

解決しました!MortgageCalView.groovy を実行しようとしていたため、エラーが発生した理由。私がグリフォンを実行したとき:住宅ローンのカルはうまくいきました。:) 言い換えれば、特定のスクリプトではなく、プロジェクトを実行する必要がありました。

于 2013-04-11T10:55:04.090 に答える