我有一个愚蠢的java日志记录问题:我正在从我的应用程序配置文件加载日志记录配置 - 但它只是在读取文件后没有记录任何内容(这看起来很像你将在网上找到的例子,除了额外的应用程序配置 - 删除它也没有帮助)."初始化..."日志行显得很好,但"启动应用程序"和任何其他消息既没有记录到控制台,也没有创建日志文件.我在这里错过了什么?
Logger代码如下所示:
...
Logger log = Logger.getLogger("myApp");
log.setLevel(Level.ALL);
log.info("initializing - trying to load configuration file ...");
Properties preferences = new Properties();
try {
FileInputStream configFile = new FileInputStream("/path/to/app.properties");
preferences.load(configFile);
LogManager.getLogManager().readConfiguration(configFile);
} catch (IOException ex)
{
System.out.println("WARNING: Could not open configuration file");
System.out.println("WARNING: Logging not configured (console output only)");
}
log.info("starting myApp");
...
Run Code Online (Sandbox Code Playgroud)
这是配置文件:
appconfig1 = foo
appconfig2 = bar
# Logging
handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
.level = ALL
# File Logging
java.util.logging.FileHandler.pattern = %h/myApp.log
java.util.logging.FileHandler.formatter = …Run Code Online (Sandbox Code Playgroud) 我正在尝试将我认为是UTC字符串的时间信息转换为std::mktime在C++中使用的时间戳.我的问题是,<ctime>/ <time.h>没有转换为UTC的功能; mktime只会将时间戳作为本地时间返回.
所以我需要弄清楚时区偏移量并将其考虑在内,但我找不到与平台无关的方法,不涉及将整个代码移植到boost::date_time.有一些我忽略的简单解决方案吗?
如何在C++流中格式化输出以打印固定宽度的左对齐表?就像是
printf("%-14.3f%-14.3f\n", 12345.12345, 12345.12345);
Run Code Online (Sandbox Code Playgroud)
poducing
12345.123 12345.123
Run Code Online (Sandbox Code Playgroud) 我在Postgresql上遇到SQL查询问题.这个select子句是数据库讲座的一个例子:
1 select t.CourseNr, t.StudentsPerCourse, g.StudentCount,
2 t.StudentsPerCourse/g.StudentCount as Marketshare
3 from (select CourseNr, count(*) as StudentsPerCourse
4 from taking
5 group by CourseNr) t,
6 (select count(*) as StudentCount
7 from Students) g;
Run Code Online (Sandbox Code Playgroud)
问题是第2行中的Marketshare列.LearningPerCourse和StudentCount都是整数类型.
在我的Postgresql数据库上使用它时,Marketshare列被评估为int类型,而我需要一个float/numeric.我没有找到任何方法来通过在SELECT子句上搜索Postgresql文档或通过googling来指定数据类型.是否有(最好是标准的SQL)方式来指定列类型或我在这里遗漏了什么?
我想从其底层类型初始化C++ 11中的强类型枚举,这是我从序列化流中读取的值,我必须检查正确的数字范围.
就像是:
enum class MyEnum {
FOO, BAR
};
MyEnum test = static_cast<MyEnum>(1);
Run Code Online (Sandbox Code Playgroud)
这按预期工作,但问题是:
MyEnum test2 = static_cast<MyEnum>(42);
Run Code Online (Sandbox Code Playgroud)
也工作,并没有指出错误.据我所知,枚举类也没有任何关于如何检查输入是否有效的界限或其他指标的概念.在"旧式"枚举中,我们将包含MIN和MAX值并与这些值进行比较,但是将这些值添加到强类型枚举中会再次向此类型添加无效值,从而破坏其目的.
任何想法如何检查边界或强制错误,以防值超出界限?
更新:
我刚试过std :: numeric_limits,但这对枚举类也不起作用:
cout << static_cast<unsigned int>(numeric_limits<MyEnum>::min()) << endl;
cout << static_cast<unsigned int>(numeric_limits<MyEnum>::max()) << endl;
Run Code Online (Sandbox Code Playgroud)
都返回0.
我正在从发送时间戳而没有毫秒的设备解析NMEA GPS数据.据我听说,这些设备将使用的时候就会把句子与.000戳在一个特定的触发点 - AFAIK在GGA句子$.
所以我解析GGA句话,走在收到$时,(我补偿使用串口波特率在同一操作中读取任何进一步的字符)的时间戳.
从这个信息,我计算修正系统时间偏移,但是当我比较设置一些NTP服务器的时候,我会得到的250毫秒的恒定差 - 当我手动纠正这一点,我是20ms的偏差,其内我的申请还可以.
但当然我不确定这个偏移的来源,以及它是否特定于我正在使用的GPS鼠标或我的系统.我使用了错误的$字符,还是有人知道应该如何处理?我知道这个问题是很模糊的,但什么可能会导致任何提示这个偏移量将是非常有益!
下面是我的一些设备的样本数据,以$字符我会随着时间偏移标注:
$GPGSA,A,3,17,12,22,18,09,30,14,,,,,,2.1,1.5,1.6*31
$GPRMC,003538.000,A,5046.8555,N,00606.2913,E,0.00,22.37,160209,,,A*58
-> $ <- GPGGA,003539.000,5046.8549,N,00606.2922,E,1,07,1.5,249.9,M,47.6,M,,0000*5C
$GPGSA,A,3,17,12,22,18,09,30,14,,,,,,2.1,1.5,1.6*31
$GPGSV,3,1,10,09,77,107,17,12,63,243,30,05,51,249,16,14,26,315,20*7E
$GPGSV,3,2,10,30,24,246,25,17,23,045,22,15,15,170,16,22,14,274,24*7E
$GPGSV,3,3,10,04,08,092,22,18,07,243,22*74
$GPRMC,003539.000,A,5046.8549,N,00606.2922,E,0.00,22.37,160209,,,A*56
-> $ <- GPGGA,003540.000,5046.8536,N,00606.2935,E,1,07,1.5,249.0,M,47.6,M,,0000*55
$GPGSA,A,3,17,12,22,18,09,30,14,,,,,,2.1,1.5,1.6*31
$GPRMC,003540.000,A,5046.8536,N,00606.2935,E,0.00,22.37,160209,,,A*56
-> $ <- GPGGA,003541.000,5046.8521,N,00606.2948,E,1,07,1.5,247.8,M,47.6,M,,0000*5E
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用动态更改JScrollPane中的JList
myList.setListData(someArray);
Run Code Online (Sandbox Code Playgroud)
在此之后,我希望JScrollPane根据需要显示Scrollbars,但这不会发生.谷歌搜索问题不是很有帮助.我尝试了以下方法的各种组合,但收效甚微(主要是通过API文档):
myScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
myList.validate(); myScrollPane.validate();
myScrollPane.setPreferredSize(Dimension someDimension);
myScrollPane.setViewportView(moduleList);
myScrollPane.setLayout(...);
Run Code Online (Sandbox Code Playgroud)
使用第一种方法时会出现滚动条,但模型更改不会激活它.我还连接到PropertyChangeEvent并验证模型更改时JList触发和事件.我在这里错过了什么?我必须使用什么方法来完成这项工作,甚至更好的方法是什么属性可以使这项工作开箱即用?
我正在阅读LZMA SDK源代码并注意到他们将指针传递给方法给自己 - 例如(来自SDK,C/Util/7z/7zAlloc.c):
void *SzAlloc(void *p, size_t size)
{
p = p; <-- !
if (size == 0)
return 0;
#ifdef _SZ_ALLOC_DEBUG
fprintf(stderr, "\nAlloc %10d bytes; count = %10d", size, g_allocCount);
g_allocCount++;
#endif
return malloc(size);
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释他们为什么这样做?