在Eclipse编译时调用Jmeter 的包;提示java.lang.reflect.UndeclaredThrowableException
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Eclipse编译时调用Jmeter 的包;提示java.lang.reflect.UndeclaredThrowableException相关的知识,希望对你有一定的参考价值。
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/G:/BUG/slf4j-log4j12-1.5.8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/G:/BUG/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
java.lang.reflect.UndeclaredThrowableException
at $Proxy5.service(Unknown Source)
at udms.core.process.common.impl.RemoteSearchEngine.service(RemoteSearchEngine.java:50)
at SearchIndex.Search.runTest(Search.java:83)
at SearchIndex.Search.main(Search.java:103)
Caused by: java.io.IOException: Request was interrupted.
at org.apache.avro.ipc.NettyTransceiver.transceive(NettyTransceiver.java:143)
at org.apache.avro.ipc.Requestor.request(Requestor.java:125)
at org.apache.avro.ipc.specific.SpecificRequestor.invoke(SpecificRequestor.java:55)
... 4 more
slf4j-log4j12-1.6.1相同的jar有两个版本,导致slf4j出错,找到跟你的slf4j对应的slf4j-log4j就可以了追问
java.lang.reflect.UndeclaredThrowableException
at $Proxy5.service(Unknown Source)
at udms.core.process.common.impl.RemoteSearchEngine.service(RemoteSearchEngine.java:50)
at Jmeter.runTest(Jmeter.java:83)
at Jmeter.main(Jmeter.java:103)
Caused by: java.io.IOException: Request was interrupted.
at org.apache.avro.ipc.NettyTransceiver.transceive(NettyTransceiver.java:143)
这问题还是存在
贴一下完整错误堆栈。这些是框架报德错误
gcc (mac/linux) 错误,VisualStudio 编译正常时调用没有匹配的函数
【中文标题】gcc (mac/linux) 错误,VisualStudio 编译正常时调用没有匹配的函数【英文标题】:gcc (mac/linux) error no matching function for call while VisualStudio compiles ok 【发布时间】:2014-03-21 12:11:05 【问题描述】:我遇到了跨平台编译的问题。 下面的代码可以在 Win、Mac 和 Linux 上编译(程序是基于 Qt 的),但是为了让它在 Mac 和 Linux 上编译,我必须定义 if/else。
Windows 编译器 (VS2010) 找到定义,但 Mac (gcc4.2) 和 Linux (Ubuntu12LTS) 找不到...
有什么想法吗?也许我错过了一些技术术语来搜索这个? 我希望能够使用“table->setMark(i,MyObj());”适用于所有系统,因为它似乎没有任何特定于平台的代码。
///// .h
void setMark(int row, MyObj& mark)
value(row).setMark(mark);
const MyObj& getMark(int row) const
return value(row).getMark();
/////
///// .cpp
MyObj obj;
bool ret = false, ifhandled = false;
m_root_command.evaluate(obj,ret,ifhandled);
if (m_marked)
Table *table = m_thisobj.getTable();
for (int i = 0; i < table->getRowCount(); i++)
#if defined(_WIN32)
// this works in windows, but fails to compile
// on other platforms with error below
table->setMark(i,MyObj());
#else
// I want to get rid of this workaround
// and use the above code for all platforms
MyObj objTmp = MyObj();
table->setMark(i,objTmp);
#endif
m_marked = false;
/////
///// Error
program.cpp: In member function 'MyObj Program::evaluate()':
program.cpp:264:36: error: no matching function for call to 'Table::setMark(int&, MyObj)'
program.cpp:264:36: note: candidate is:
table.h:326:9: note: void Table::setMark(int, MyObj&)
table.h:326:9: note: no known conversion for argument 2 from 'MyObj' to 'MyObj&'
make: *** [program.o] Error 1
/////
【问题讨论】:
【参考方案1】:您不能将临时对象绑定到非常量引用。要使用table->setMark(i,MyObj());
,您需要更改声明
void setMark(int row, MyObj& mark)
进入
void setMark(int row, const MyObj& mark)
对于函数委托给的setMark
也是如此。
编辑:它在 VS 中工作的事实显然是 known bug/feature
【讨论】:
我不明白的是,在 Windows 以外的操作系统上编译的代码不是使用临时变量,而是使用局部变量。在这种情况下,它应该能够作为非常量参数正确传递给该函数,不是吗? 这需要使用水晶球,因为 OP 的问题似乎有点模棱两可。他想摆脱宏并在所有平台上将其替换为table->setMark(i,MyObj());
。并且该假设代码无法编译该错误。所以,我猜当前显示的代码实际上编译时没有错误。
我已经更改了声明,但我再次收到错误: void setMark(int row, const MyObj& mark) value(row).setMark(mark); // 在成员函数 'void Table::setMark(int, const MyObj&)': 错误: no matching function for call to 'Table::setMark(const MyObj&)' note: Candidate is: note: void Table::setMark (MyObj&) 注意:没有已知的参数 1 从 'const MyObj' 到 'MyObj&' 的转换
您是否忘记更改void setMark(int row, const MyObj& mark)
委托给的函数的声明?该函数的 ref 参数也必须是 const,因为您不能将 const ref 绑定到非 const ref。
我也不会说英语。我的意思是在void setMark(int row, const MyObj& mark)
内部你调用value(row).setMark(mark);
。根据新错误,其他函数期望参数是非常量。但是,由于您正确地将引用更改为 const,它不能再绑定到该参数。因此,您还必须更改该其他函数的声明 (void Table::setMark(MyObj&)
-> void Table::setMark(const MyObj&))
。通常,您应该始终将所有引用声明为 const,除非您打算修改引用的对象。【参考方案2】:
据我所知,问题在于#if 子句。
#if defined(_WIN32)
table->setMark(i,MyObj());
#else
setMark 代码仅在 Windows 上执行,因为这是唯一的 #if defined(_WIN32) 子句为真的地方。如果您删除 #if 子句,它应该在 Mac OS 和 Linux 上都可以正常工作。
【讨论】:
有#else
导致接下来的两行编译。我不知道为什么它是必要的。
是的。我也觉得没有必要。这就是为什么我说要完全删除#if 子句。可能我表达的不是很好。我的想法是删除 #if 子句,它是 else。这样 table->setMark(i,MyObj());将在所有操作系统中每次执行,因此无需创建临时对象。
你可能误解了我的问题! (我不是母语人士,所以请原谅我的写作!)。我知道我的 if 定义,否则的事情。我这样做是为了克服这个问题。问题是为什么:table->setMark(i,MyObj());
以上是关于在Eclipse编译时调用Jmeter 的包;提示java.lang.reflect.UndeclaredThrowableException的主要内容,如果未能解决你的问题,请参考以下文章
eclipse写java时没有import对应的包,报错,点小红叉不提示导入包。手工把import语句写全OK,但是不方便。
eclipse 中怎么设置才能在XML编辑器中提示java中的包名类