1

Groovy Swing Builder の fileChooser をうまく使用しようとしています。次の例をgroovy Webサイトからコピーすると:

def openExcelDialog  = SwingBuilder.fileChooser(dialogTitle:"Choose an excel file", 
                               id:"openExcelDialog", fileSelectionMode :         JFileChooser.FILES_ONLY, 
                               //the file filter must show also directories, in order to be able to look into them
                               fileFilter: [getDescription: {-> "*.xls"}, accept:{file-> file ==~ /.*?\.xls/ || file.isDirectory() }] as FileFilter) {

}

しかし、エラーメッセージが表示されました:

groovy.lang.MissingMethodException: No signature of method: static groovy.swing.SwingBuilder.fileChooser() is applicable for argument types: (java.util.LinkedHashMap, ConsoleScript19$_run_closure1) values
4

3 に答える 3

6

SwingBuilder の外でそのように fileChooser を使用することはできません。代わりに、swingBuilder 以外の通常の JFileChooser を使用する必要があります。完全な動作例を次に示します。

import javax.swing.filechooser.FileFilter
import javax.swing.JFileChooser

def openExcelDialog = new JFileChooser(
                            dialogTitle: "Choose an excel file",
                            fileSelectionMode: JFileChooser.FILES_ONLY, 
                            //the file filter must show also directories, in order to be able to look into them
                            fileFilter: [getDescription: {-> "*.xls"}, accept:{file-> file ==~ /.*?\.xls/ || file.isDirectory() }] as FileFilter)

openExcelDialog.showOpenDialog()

new JFileChooserは閉じ括弧で終わるだけであることに注意してください。末尾の閉じはありません。

于 2011-08-18T04:19:16.457 に答える
3

OverZealousのソリューションはNPEで失敗します。

Exception in thread "Basic L&F File Loading Thread" java.lang.NullPointerException
    at java.util.regex.Matcher.getTextLength(Unknown Source)
    at java.util.regex.Matcher.reset(Unknown Source)
    at java.util.regex.Matcher.<init>(Unknown Source)
    at java.util.regex.Pattern.matcher(Unknown Source)
    at org.codehaus.groovy.runtime.InvokerHelper.matchRegex(InvokerHelper.java:335)
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.matchRegex(ScriptBytecodeAdapter.java:722)
    at ExcelChooser2$_run_closure2.doCall(ExcelChooser2.groovy:13)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:272)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:884)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:39)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at FileFilter_groovyProxy.accept(Script1.groovy:7)
    at javax.swing.JFileChooser.accept(Unknown Source)
    at javax.swing.plaf.basic.BasicDirectoryModel$LoadFilesThread.run0(Unknown Source)
    at javax.swing.plaf.basic.BasicDirectoryModel$LoadFilesThread.run(Unknown Source)

解決:

年:fileFilter: [getDescription: {-> "*.xls"}, accept:{file -> file ==~ /.*?\.xls/ || file.isDirectory() }] as FileFilter

新着:fileFilter: [getDescription: {-> "*.xls"}, accept:{file -> file.toString() ==~ /.*?\.xls/ || file.isDirectory() }] as FileFilter

[Win7(x64)Groovyバージョン:1.8.3 JVM:1.6.0_29)]

于 2011-12-18T18:24:00.630 に答える
1

最初に SwingBuilder オブジェクトを作成する必要があると思います。これは私のために働いた:

def swing = new SwingBuilder()
def dialog = swing.fileChooser(dialogTitle: "Open A File")
if (dialog.showOpenDialog() == JFileChooser.APPROVE_OPTION) {
    println dialog.selectedFile
}

プロパティの完全なリストについては、こちらをご覧ください。

于 2015-08-31T21:17:12.747 に答える