首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将javax.smartcardio添加到项目时出现Java

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

Stack Overflow用户
提问于 2014-11-10 17:48:47
回答 1查看 1.9K关注 0票数 0

我正在尝试向我们的一个应用程序中添加一些简单的智能卡读取器功能,我一直收到一个我无法理解的构建错误,因此我正在寻找输入或任何建议,这些建议将帮助我在一个新类中导入javax.smartcardio之后,使项目能够编译。

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

但是现在我已经将智能心脏导入到新的类中,我的项目将不会编译。我已经尝试删除和重新添加JRE系统库,在这里的其他几个帖子,但我认为这可能是一个不同的问题。编译时,即使我反复检查过,JRE文件夹中也有jar,但编译器似乎没有识别或找不到rt.jar。

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

代码语言:javascript
复制
[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行的编译错误:

代码语言:javascript
复制
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();
        }
    } 
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-10 18:23:11

谢谢佐兰·雷加!虽然你没有给出真正的答案,但你看到了我自己的愚蠢错误,帮助我实现了目标!

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26849788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档