(java.lang.String)には適用されません(java.lang.オブジェクト)
-
29-10-2019 - |
質問
久しListnerクラスと呼ばれ TopicS Imうですから、guiというreadMessages
時Imしているため、クラス内容を、以下の方法
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
System.out.println("test test test");
System.out.print("you pressed" +topicCombobox.getSelectedItem());
TopicS a = new TopicS();
a.addTopicToListner(topicCombobox.getSelectedItem());
}
ちょっとエラーと
addTopicListner(java.lang.文字列)の課題には適用されません(java.lang.オブジェクト)
時に変更したい文字列オブジェクトを取得しまその他のエラー。のmainメソッドが含まれ、この微細なGUIによっ追加する必要があります。思いが価値をコンボボックスでのString配列、文字列へのセキュリティーソフトですが(t)
import java.util.Hashtable;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicSession;
import javax.jms.TopicSubscriber;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class TopicS implements MessageListener
{
private TopicConnection topicConnection;
private TopicSession topicSession;
public Topic topic;
private TopicSubscriber topicSubscriber;
public TopicS()
{}
public void addTopicToListner(String t){
try
{
// create a JNDI context
Hashtable properties = new Hashtable();
properties.put(Context.INITIAL_CONTEXT_FACTORY,"org.exolab.jms.jndi.InitialContextFactory");
properties.put(Context.PROVIDER_URL,"rmi://localhost:1099/");
Context context = new InitialContext(properties);
// retrieve topic connection factory
TopicConnectionFactory topicConnectionFactory =
(TopicConnectionFactory)context.lookup("JmsTopicConnectionFactory");
// create a topic connection
topicConnection = topicConnectionFactory.createTopicConnection();
// create a topic session
// set transactions to false and set auto acknowledgement of receipt of messages
topicSession = topicConnection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);
// retrieve topic
topic = (Topic) context.lookup(t);
// create a topic subscriber and associate to the retrieved topic
topicSubscriber = topicSession.createSubscriber(topic);
// associate message listener
topicSubscriber.setMessageListener(this);
// start delivery of incoming messages
topicConnection.start();
}
catch (NamingException e)
{
e.printStackTrace();
}
catch (JMSException e)
{
e.printStackTrace();
}
}
/* public static void main(String[] args)
//{
try
{
TopicS listener = new TopicS();
Thread.currentThread().sleep(2000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
*/
// process incoming topic messages
public void onMessage(Message message)
{
try
{
String messageText = null;
if (message instanceof TextMessage)
messageText = ((TextMessage)message).getText();
System.out.println(messageText);
}
catch (JMSException e)
{
e.printStackTrace();
}
}
}
解決
ことになるので JComboBox.html.getSelectedItem() オブジェクトを返します
public Object getSelectedItem()
やメソッドのパ文字列
public void addTopicToListner(String t)
場100%確認の内容をコンボボックスが文字列だけをキャストで
a.addTopicToListner( (String) topicCombobox.getSelectedItem());
ことになるのです。
このコードサンプルを再現したそうだコンパイルエラー:
class StringAndObject {
public void workWithString( String s ) {} // We just care about
public void workWithObject( Object o ) {} // the signature.
public void run() {
String s = ""; // s declared as String
Object o = s; // o declared as Object
// works because a String is also an Object
workWithObject( s );
// naturally a s is and String
workWithString( s );
// works because o is an Object
workWithObject( o );
// compiler error....
workWithString( o );
}
}
出力:
StringAndObject.java:19: workWithString(java.lang.String) in StringAndObject cannot be applied to (java.lang.Object)
workWithString( o );
^
1 error
以上、説明してきたように、最後の話workWithString(o)
なコンパイルでも は 文字列オブジェクトです。もにコンパイラのみを知る o
たとして宣言された Object
ないわからない場合はそのオブジェクトがstringまたは何か( Date
します。
この助けになっていますよ。
他のヒント
JComboBox.getSelectedItem()
タイプを返します Object
, 、 いいえ String
. 。あなたは電話することができます toString()
その結果、オブジェクトの文字列表現を返します。それはあなたがタイプのタイプを返そうとしているように見えます Topic
, 、つまり、オーバーライドする必要があります toString()
メソッドオン Topic
あなたが望む価値を返すために。
次のコードを試してください
topicCombobox.getSelectedItem() instanceof String ? (String)topicCombobox.getSelectedItem() : "Socks";
これは一時的な修正です。 getSelectedItem()
aです String
.
あなたがそれが常にそれをキャストするだけであることを知っているなら
(String)topicCombobox.getSelectedItem()