未解决的编译问题:没有封闭的实例,类中的私有方法不可见,这个$ 0无法解析

时间:2013-06-26 04:55:30

标签: java decompiler

我已经从jar修改了java代码,在编译之后,我编写的代码不起作用。我尝试反编译,我发现以下错误:

未解决的编译问题

  
    

可以在范围内访问DirectDelivDetail类型的封闭实例

         

此$ 0无法解析或不是字段

         

DirectDelivDetail 类型的方法 setComments()不可见

  

我知道有很多线程在讨论这个问题,但我找不到解决方案。 好的,这是代码:

public class DirectDelivDetail extends CMSApplet implements
    LookupHandler {

    private MultiLineEditor comments = null;
    private CMSShipment shipment = null;

    private void setComments() {
        try {
            if (this.shipment != null) {
                this.shipment.setComments(this.comments.getText());
            }
        } catch (BusinessRuleException bre) {
            JOptionPane.showMessageDialog(null, res.getString(bre.getMessage()));

            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    DirectDelivDetail.this.comments.requestFocus();
                }
            });
        } finally {
            checkFields();
        }
    }

    private JPanel createDetailPanel() {
        this.comments = new MultiLineEditor();
        this.comments.addFocusListener(new FocusAdapter() {
            public void focusLost(FocusEvent e) {
                if (!e.isTemporary()) {
                    DirectDelivDetail.this.setComments();
                }
            }
        });
        return detailPanel;
    }
}

编译后的代码更改。这是以下更改。

private JPanel createDetailPanel() {
    this.comments = new MultiLineEditor();
    this.comments.addFocusListener(new FocusAdapter() {
        public void focusLost(FocusEvent e) {
            throw new Error("Unresolved compilation problems: \n\tNo enclosing instance of the type DirectDelivDetail is accessible in scope\n\tThe method checkCancelCommand(FocusEvent) from the type DirectDelivDetail is not visible\n\tthis$0 cannot be resolved or is not a field\n\tNo enclosing instance of the type DirectDelivDetail is accessible in scope\n\tThe method setComments() from the type DirectDelivDetail is not visible\n");
        }
    });
    return detailPanel;
}

1 个答案:

答案 0 :(得分:2)

您的第一个错误是您已允许/告知您正在使用的IDE运行其中存在编译错误的应用程序。

不要那样做!

取消选中偏好,或其他任何内容。您需要在尝试运行程序之前修复编译错误

如果你这样做,反编译将不是必要的...而且你不会看到因此而产生的额外混乱的“假象”。


实际的编译错误似乎是DirectDelivDetail.this无效。但看起来应该是这样。但是,我不清楚源代码或错误消息是真实的......还是反编译/重新编译的人工制品。 (你的问题不清楚你是如何达到产生这些错误信息的那一点的。)所以我认为最好的办法是向我们展示你通过编译<得到的原始错误信息。 em>原始源代码......不是由反编译器重建的东西。