我有一个问题,那就是当我在NetBeans中通过Gmail发送附件时,程序会正常工作并发送消息,但当我try 从NetBeans运行JAR文件时,程序不会显示打印数字3的对话框. 这意味着问题从这一行开始 MultiPartEmail Email=new MultiPartEmail(); 程序将继续执行,而不会引发异常或打印数字3.

知道该程序使用了几个库,所有这些库都按照它们在JAR文件中应有的方式工作.

我还try 了一个库javax-mail.jar.我遇到了同样的问题,因为程序在NetBeans中工作得很好,但JAR文件不能只发送消息.

以下是我的完整类代码:

package FTPEmail;

import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;

import java.io.IOException;

public class SendAttachment {

public SendAttachment(String attachment, String subject, String msg) throws IOException {
    final String sender = "sender123@gmail.com";
    final String receiver = "receiver123@gmail.com";
    final String password = "abc123abc123abc1";
    Tools.Text.dialogErrorNumber("1");
    try {
        EmailAttachment emailAttachment = new EmailAttachment();
        emailAttachment.setPath(attachment);
        emailAttachment.setDisposition(EmailAttachment.ATTACHMENT);
        emailAttachment.setDescription("Attachment");
        Tools.Text.dialogErrorNumber("2");
        MultiPartEmail email = new MultiPartEmail();
        Tools.Text.dialogErrorNumber("3");
        email.setHostName("smtp.gmail.com");
        Tools.Text.dialogErrorNumber("4");
        email.setSmtpPort(465);
        Tools.Text.dialogErrorNumber("5");
        email.setAuthenticator(new DefaultAuthenticator(sender, password));
        Tools.Text.dialogErrorNumber("6");
        email.setSSLOnConnect(true);
        Tools.Text.dialogErrorNumber("7");
        email.addTo(receiver);
        Tools.Text.dialogErrorNumber("8");
        email.setFrom(sender);
        Tools.Text.dialogErrorNumber("9");
        email.setSubject(subject);
        Tools.Text.dialogErrorNumber("10");
        email.setMsg(msg);
        Tools.Text.dialogErrorNumber("11");

        // attach the file
        email.attach(emailAttachment);
        Tools.Text.dialogErrorNumber("12");
        // send the email
        email.send();
    } catch (EmailException e) {
        Tools.Text.dialogErrorNumber(e.getMessage());
        Tools.Text.dialogErrorNumber("0060");
    }
}
}

推荐答案

你正在用try/catch—好的包装代码.

然而,您正在捕获一个特定的异常EmailException,我猜这不会被抛出,所以异常会在其他地方冒泡.

如果您将EmailException更改为Exception,我猜still不会发现问题,因为我猜测,当您在NetBeans环境之外运行代码时,会缺少一些依赖项,并且此类错误将作为java.lang.Error的子类抛出--可能是LinkageError.如果你仔细研究这class hierarchy个错误,你会发现这些错误不是Exception的子类.

我的建议是把try/catch改成Throwable...错误/异常树中的最高点,然后您将发现实际发生了什么.

然后,您会发现缺少NetBeans为您隐式添加到类路径中的依赖项.

Java相关问答推荐

当我用OkHttpClient重写shouldInterceptRequest来发布数据时,Android WebView正在以纯HTML加载URL内容

即使我正在使用并发方法,使用Javascript的应用程序也会继续冻结'

Select 按位运算序列

Quarkus keycloat配置不工作.quarkus. keycloak. policy—enforcer. enable = true在. yaml表示中不工作

在Java Swing Paint应用程序中捕获快速鼠标移动时遇到困难

如何在运行时动态创建表(使用Java、JPA、SprringBoot)

查找剩余的枚举

Spring Security不允许加载js

Log4j与jdk21兼容吗?

我可以在@Cacheable中使用枚举吗

如何获得凌空cookies ,并设置它在下一个请求- android

在应用getCellFormula()时,Excel引用中的文件名始终为";[1]";使用Apache POI()

在缺少字段时使用Jackson With Options生成Optional.Empty()

Java嵌套流查找任意值

使用MediaPlayer类在一段时间后停止播放音乐

使用同步方法中的新线程调用同步方法

原始和参数化之间的差异调用orElseGet时可选(供应商)

try 添加;按流派搜索;在Web应用程序上,但没有;I don’我不知道;It’这个代码错了

人们在 IntelliJ 上将-Dhttp.proxyHost=your.proxy.net -Dhttp.proxyPort=8080放在哪里?

ChromeDriver 版本 117+ 强制另存为对话框 - 如何绕过? (selenium/Java)