hjhqiang 2025-01-27 22:04 采纳率: 0%
浏览 40

这段代码运行错误不知道怎么解决

Exception in thread "main" java.lang.UnsupportedOperationException: getSubject is supported only if a security manager is allowed
at java.base/javax.security.auth.Subject.getSubject(Subject.java:347)
at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:569)
at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2391)
at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2391)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2391)
at org.apache.spark.SparkContext.(SparkContext.scala:295)
at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2320)
at org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSession.scala:868)
at org.apache.spark.sql.SparkSession$Builder$$anonfun$6.apply(SparkSession.scala:860)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:860)这段代码运行错误不知道怎么解决

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2025-01-27 22:04
    关注

    以下回复引自免费微信小程序:皆我百晓生。 如问题解决,还请采纳。如仍有疑问,请回复留言或私信博主,以便获得更精准的帮助。

    这个问题是关于JAVA中的异常处理机制和对象引用的。在你的代码中,你尝试使用GETSUBJECT()方法获取一个对象的SUBJECT属性,但是发现这个方法只适用于JAVA 8及以上版本的类。如果你的类还没有被标记为支持GETSUBJECT方法,那么你可能需要先实现这个方法,或者修改你的类以使其支持GETSUBJECT方法。

    以下是一个简单的示例:

    IMPORT JAVA.UTIL.CONCURRENT.LOCKS.LOCK;
    IMPORT JAVA.UTIL.CONCURRENT.LOCKS.REENTRANTLOCK;
    
    PUBLIC CLASS MYCLASS {
        PRIVATE STRING SUBJECT;
    
        PUBLIC VOID SETSUBJECT(STRING SUBJECT) {
            THIS.SUBJECT = SUBJECT;
        }
    
        PUBLIC STRING GETSUBJECT() {
            RETURN SUBJECT;
        }
    }
    
    PUBLIC CLASS MAIN {
        PUBLIC STATIC VOID MAIN(STRING[] ARGS) {
            MYCLASS MYOBJ = NEW MYCLASS();
            LOCK LOCK = NEW REENTRANTLOCK();
    
            // 设置GETSUBJECT方法
            MYOBJ.SETSUBJECT("HELLO, WORLD!");
    
            // 获取GETSUBJECT方法的结果
            STRING SUBJECT = MYOBJ.GETSUBJECT();
    
            SYSTEM.OUT.PRINTLN(SUBJECT); // 应该打印出"HELLO, WORLD!"
        }
    }
    

    在这个例子中,我们首先创建了一个MYCLASS实例,并设置了它的SUBJECT属性。然后,我们通过SETSUBJECT方法设置GETSUBJECT方法,但没有调用它。这样,即使MYOBJ的SUBJECT属性已经被设置,GETSUBJECT方法仍然无法执行。我们需要手动调用GETSUBJECT方法来获取结果。

    如果你的类实现了COMPARABLE接口并且实现了OBJECT接口,你可以直接使用COMPARETO方法来比较两个对象。如果它们的SUBJECT属性相等,则返回0;否则,返回1。例如:

    PUBLIC CLASS MYCLASS IMPLEMENTS COMPARABLE<MYCLASS> {
        PRIVATE STRING SUBJECT;
    
        PUBLIC MYCLASS(STRING SUBJECT) {
            THIS.SUBJECT = SUBJECT;
        }
    
        @OVERRIDE
        PUBLIC INT COMPARETO(MYCLASS OTHER) {
            RETURN THIS.SUBJECT.COMPARETO(OTHER.SUBJECT);
        }
    
        PUBLIC STRING GETSUBJECT() {
            RETURN SUBJECT;
        }
    }
    

    注意:这种方法可能会导致性能下降,因为它需要对每个对象进行一次比较。对于大型数据集,这可能是不合适的。在实际应用中,你应该考虑其他更高效的方法来处理这些操作。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月27日