将javax.smartcardio添加到项目时出现Java Build Error

时间:2014-11-10 17:48:48

标签: java eclipse maven build smartcard

我正在尝试为我们的某个应用程序添加一些简单的智能卡读卡器功能,并且我不断收到我无法弄清楚的构建错误,因此我正在寻找输入或任何我可以提供的建议找到这将帮助我在其中一个新类中导入javax.smartcardio后编译项目。

我最初用一个字符串解析方法和一个main方法创建了一个简单的类。作为一个独立的项目,我可以毫无错误地运行课程,并且读卡器和卡片的所有预期信息都会按照预期通过System.out打印到控制台,所以我不认为有这样的信息。我从这个早期测试项目中带到我的项目的代码的任何问题。

但是现在我已经将smartcardio导入了新课程,我的项目无法编译。我已尝试删除并重新添加JRE系统库,如其他几个帖子所示,但我认为这可能是一个不同的问题。在编译时,似乎编译器无法识别或无法找到rt.jar,即使我已经反复检查并且jar在JRE文件夹中。

这是错误,任何帮助都非常感谢。如果需要更多信息,请告诉我。

[INFO] --- maven-antrun-plugin:1.7:run (compilegwt) @ hwslqc ---
[INFO] Executing tasks

main:
     [echo] GWT compilation: hwslqc
     [java] Compiling module com.prusa.hwslqc.hwslqc
     [java]    [ERROR] An internal compiler exception occurred
     [java] com.google.gwt.dev.jjs.InternalCompilerException: Failed to get JNode
     [java]     at com.google.gwt.dev.jjs.impl.TypeMap.get(TypeMap.java:140)
     [java]     at com.google.gwt.dev.jjs.impl.TypeMap.get(TypeMap.java:71)
     [java]     at com.google.gwt.dev.jjs.impl.BuildTypeMap.getType(BuildTypeMap.java:730)
     [java]     at com.google.gwt.dev.jjs.impl.BuildTypeMap.access$000(BuildTypeMap.java:99)
     [java]     at com.google.gwt.dev.jjs.impl.BuildTypeMap$BuildDeclMapVisitor.visit(BuildTypeMap.java:195)
     [java]     at org.eclipse.jdt.internal.compiler.ast.LocalDeclaration.traverse(LocalDeclaration.java:237)
     [java]     at org.eclipse.jdt.internal.compiler.ast.Block.traverse(Block.java:127)
     [java]     at org.eclipse.jdt.internal.compiler.ast.TryStatement.traverse(TryStatement.java:853)
     [java]     at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.traverse(MethodDeclaration.java:239)
     [java]     at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.traverse(TypeDeclaration.java:1239)
     [java]     at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.traverse(CompilationUnitDeclaration.java:687)
     [java]     at com.google.gwt.dev.jjs.impl.BuildTypeMap.createPeersForNonTypeDecls(BuildTypeMap.java:637)
     [java]     at com.google.gwt.dev.jjs.impl.BuildTypeMap.exec(BuildTypeMap.java:514)
     [java]     at com.google.gwt.dev.jjs.impl.BuildTypeMap.exec(BuildTypeMap.java:523)
     [java]     at com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.precompile(JavaToJavaScriptCompiler.java:599)
     [java]     at com.google.gwt.dev.jjs.JavaScriptCompiler.precompile(JavaScriptCompiler.java:33)
     [java]     at com.google.gwt.dev.Precompile.precompile(Precompile.java:284)
     [java]     at com.google.gwt.dev.Precompile.precompile(Precompile.java:233)
     [java]     at com.google.gwt.dev.Precompile.precompile(Precompile.java:145)
     [java]     at com.google.gwt.dev.Compiler.run(Compiler.java:232)
     [java]     at com.google.gwt.dev.Compiler.run(Compiler.java:198)
     [java]     at com.google.gwt.dev.Compiler$1.run(Compiler.java:170)
     [java]     at com.google.gwt.dev.CompileTaskRunner.doRun(CompileTaskRunner.java:88)
     [java]     at com.google.gwt.dev.CompileTaskRunner.runWithAppropriateLogger(CompileTaskRunner.java:82)
     [java]     at com.google.gwt.dev.Compiler.main(Compiler.java:177)
     [java]       [ERROR] <no source info>: public final class javax.smartcardio.TerminalFactory
     [java]     extends java.lang.Object
     [java] /*   fields   */
     [java] private static final [unresolved] java.lang.String PROP_NAME
     [java] private static final [unresolved] java.lang.String defaultType
     [java] private static final [unresolved] javax.smartcardio.TerminalFactory defaultFactory
     [java] private final [unresolved] Unresolved type javax.smartcardio.TerminalFactorySpi spi
     [java] private final [unresolved] Unresolved type java.security.Provider provider
     [java] private final [unresolved] java.lang.String type
     [java] /*   methods   */
     [java] [unresolved] private void <init>(Unresolved type javax.smartcardio.TerminalFactorySpi, Unresolved type java.security.Provider, java.lang.String) 
     [java] public static javax.smartcardio.TerminalFactory getDefault() 
     [java] [unresolved] public static java.lang.String getDefaultType() 
     [java] [unresolved] public static javax.smartcardio.TerminalFactory getInstance(java.lang.String, java.lang.Object) throws java.security.NoSuchAlgorithmException
     [java] [unresolved] public static javax.smartcardio.TerminalFactory getInstance(java.lang.String, java.lang.Object, java.lang.String) throws java.security.NoSuchAlgorithmException, Unresolved type java.security.NoSuchProviderException
     [java] [unresolved] public static javax.smartcardio.TerminalFactory getInstance(java.lang.String, java.lang.Object, Unresolved type java.security.Provider) throws java.security.NoSuchAlgorithmException
     [java] [unresolved] public Unresolved type java.security.Provider getProvider() 
     [java] [unresolved] public java.lang.String getType() 
     [java] public javax.smartcardio.CardTerminals terminals() 
     [java] [unresolved] public java.lang.String toString() 
     [java] /*   members   */
     [java] Unresolved type javax.smartcardio.TerminalFactory$NoneCardTerminals
     [java] Unresolved type javax.smartcardio.TerminalFactory$NoneFactorySpi
     [java] Unresolved type javax.smartcardio.TerminalFactory$NoneProvider
     [java] 
     [java] 
     [java] 
     [java]       [ERROR] at SwipeCardUtil.java(48): TerminalFactory factory = TerminalFactory.getDefault();
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 38.721s

以下是第48行导致编译错误的非常简单的问题:

package com.prusa.hwslqc.client.ui.util;

import java.util.List;

import javax.smartcardio.Card;
import javax.smartcardio.CardException;
import javax.smartcardio.CardTerminal;
import javax.smartcardio.TerminalFactory;



/**
 * @author SWESTF01
 *
 */
@SuppressWarnings("restriction")
public class SwipeCardUtil 
{

    /**
     * @param theBytes
     * @return theByteArray as a hex string
     */
    public static String byteArrayToHexString(byte[] theBytes)          
    {             
        StringBuffer sb = new StringBuffer(theBytes.length * 2);             

        for (int i = 0; i < theBytes.length; i++) 
        {               
            int byteRead = theBytes[i] & 0xff;               
            if (byteRead < 16) 
            {                 
                sb.append('0');               
            }               
            sb.append(Integer.toHexString(byteRead));          
        }             
        return sb.toString().toUpperCase();          
     }

    /**
     */
    @SuppressWarnings("restriction")
    public static void readCard()
    {                 
        try 
        {
            // Show the list of available terminals
            TerminalFactory factory = TerminalFactory.getDefault();

            List<CardTerminal> terminals = factory.terminals().list();
            if (terminals.size() == 0) {
                System.out.println("No terminals found.");
                return;
            }
            System.out.println("Terminal: " + terminals.get(0).getName());

            // Get the first terminal in the list
            CardTerminal terminal = terminals.get(0);
            boolean cardHasBeenRead = false;

            if(!terminal.isCardPresent())
            {
                System.out.println("Please insert a card.");
            }

            //8 hours = 28800000
            //1 day = 86400000
            while(terminal.waitForCardPresent(86400000))
            {

                if(!cardHasBeenRead)
                {
                    // Establish a connection with the card using
                    // "T=0", "T=1", "T=CL" or "*"
                    Card card = terminal.connect("*");

                    System.out.println("Card: " + card);

                    // Get ATR
                    byte[] baATR = card.getATR().getBytes();

                    System.out.println("ATR: " + SwipeCardUtil.byteArrayToHexString(baATR));

                    // Disconnect
                    // true: reset the card after disconnecting card.
                    card.disconnect(true);
                    cardHasBeenRead = true;
                }

                if(!terminal.isCardPresent())
                {
                    cardHasBeenRead = false;
                    System.out.println("Please insert a card.");
                }
             }
        } 
        catch (CardException ex) {
            System.out.println("Please connect a Card Reader and restart the program.");
            ex.printStackTrace();
        }
    } 
}

1 个答案:

答案 0 :(得分:0)

谢谢Zoran Regvart!虽然你没有真正提供答案,但你通过看到我自己的愚蠢错误帮助我到达那里!

我已将SwipeCardUtil类添加到项目中错误的util文件夹中!通过将它从客户端util文件夹移动到服务器端util文件夹,我能够编译项目并继续我的工作。谢谢你睁开我的眼睛!