Immer classcastexception-Fehler in java
Hallo, ich bin immer folgende exception
Exception in thread "main" java.lang.Classcastexception-Fehler: javax.E-mail.util.SharedByteArrayInputStream kann nicht umgewandelt werden, javax.E-mail.Multipart
Bin ich nicht immer jede Zusammenstellung Ausnahme in der Eclipse-IDE, aber wenn ich versuche das Projekt erstellen, erhalte ich diese exception.
Nachdem das Projekt zu erstellen, ich bin mit dem Projekt, die durch die java -jar-Datei, so dass Ihr nicht die Befriedigung der if(content instanceof Multipart) - Bedingung, aber wenn ich arbeite mit der Eclipse-IDE seine Arbeitsmethoden in Ordnung. Jeder Zeiger wird sehr hilfreich für mich,
Aus der eclipse-IDE, ich bin immer die megssage.getContent() als javax.mail.internet.MimeMultipart@1dc0e7a
aber beim ausführen mit der jar-Datei, die ich bin immer der Inhalt, wie
javax.mail.util.SharedByteArrayInputStream@2f0d54
Bitte können Sie mir sagen, was ist der Unterschied zwischen Ihnen.
Geänderte code:
InputStream inStream = null;
if(!message.getContentType().contains("text/plain")){
Object content = message.getContent();
if (message.isMimeType("multipart/*")) {
//message.isMimeType("multipart/*")||
Multipart multipart = (Multipart) content;
for (int j = 0; j < multipart.getCount(); j++) {
BodyPart bodyPart = multipart.getBodyPart(j);
inStream = bodyPart.getInputStream();
fileName=bodyPart.getFileName();
}
}
else{
System.out.println("content not instance of multipart");
}`enter code here`
Bitte kann jemand mir helfen bei der Lösung dieses Problem..
Vielen Dank im Voraus...
- Sind Sie sicher, dass Sie die gleiche Quelle?
- Ja, ich bin die gleiche Quelle ....
- Sehe ich etwas ähnlich wie in meinem Projekt, und ich bemerkte Sie in der Dokumentation für getContent () - Zustände "Für die content-Typen bekannt sind, die DataHandler-system, ein input-stream zurückgegeben wird, wie der Inhalt." Ist es möglich, das ausführen von code in einem anderen Kontext erstellt eine Nachricht mit einer anderen DataHandler? Vielleicht in den OPs, wenn seine eclipse-classpath findet verschiedene Versionen des E-mail-Klassen, bauen die Nachricht dann seinen Befehl Zeile-classpath und instanziieren verschiedene DataHandlers.
Du musst angemeldet sein, um einen Kommentar abzugeben.
message.getContent()
zurückjavax.mail.util.SharedByteArrayInputStream
hier, aber dieSharedByteArrayInputStream
wird nicht gegossen-in der Lage, eineMultipart
Instanz, da Sie nicht unbedingt eine multipart-Nachricht.Könnte man überprüfen, ob der mimetype ist eine mehrteilige nichts:
Oder Sie können tun, Instanz...
Du bist immer eine Ausnahme, weil der return-Wert
getContent
ist ein Verweis auf einejavax.mail.util.SharedByteArrayInputStream
und wenn die Klasse nicht implementierenMultipart
. Vermutlich ist dies nicht eine multipart-mail-Nachricht.Als Dokumentation für
Part.getContent
Staaten:Also im Grunde, wenn Sie verarbeitet werden sollen multipart-Nachrichten in einer bestimmten Weise, werden Sie brauchen, um zu verwenden:
Ok, also hier ist was passiert ist. Es sieht aus wie Sie versuchen, den Inhalt von einem Objekt implementiert javax.E-mail.Teil, aber das format ist unbekannt, in welchem Fall MimeMessage wird eine Eingabe-stream. In diesem Fall, es ist wieder eine
javax.mail.util.SharedByteArrayInputStream
. Egal, ein input-stream kann nicht konvertiert werden, um dieMultipart
- Schnittstelle.Können Sie testen, um zu sehen, ob es einen Umsetzer von multipart mit isMimeType (birryree Vorschlag):
Oder Sie können den test für eine direkte übereinstimmung (meine ursprüngliche Vorschlag):
getContentType ist auch auf der
Part
- Schnittstelle. Seine Dokumentation gefunden werden kann hier.Sie können eine Liste aller möglichen Inhaltstypen hier.
Oder Sie können testen, basierend auf dem Ergebnis des instanceof (Jon Skeet Antwort):
Für unbekannte mime-Typen, die MimeMessage class kehrt mit
ShraedByteArrayInputstream
als Dokumentation sagt.Überprüfen Sie die Rückgabe-Typ mit
instanceof
dann gegossen.Update:
Wenn Sie sind unter Verwendung der gleichen Quelle wie Sie in Eclipse und die Reaktion der
getContent()
Methode ist immer noch anders, dann können Sie versuchen, ändern derfile.encoding
Eigenschaft.Beispiel:
Update2:
Vielleicht eine ältere version der Klasse geladen wird, die Sie in Ihrem Glas. Bitte überprüfen Sie Ihre classpath für die geladenen Klassen.
Beim exportieren der Runnable-jar-Datei, wählen Sie " package required libraries into generated JAR, das löst das problem.
Diese möglicherweise, weil einige charset nicht gefunden werden kann richtig, so dass die zurückgegebenen multipart-Objekt nicht geparst.