执行以下PHP代码时:
$m = new MongoClient("mongodb://localhost:27017");
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
致命错误:在(...)中找不到"MongoClient"类
MongoDB扩展似乎已正确安装(我将php_mongodb.dll复制到ext文件夹并更新了php.ini).
PHP似乎确认扩展正在运行,因为以下代码确认它已加载:
echo extension_loaded("mongodb") ? "loaded\n" : "not loaded\n";
Run Code Online (Sandbox Code Playgroud)
此外,还php_mongodb.dll显示已加载mongodb扩展名.
UPDATE
问题仍未解决.
php.ini 清楚地显示驱动程序已加载:
但我仍然收到同样的致命错误.
我们的Java Swing应用程序在Windows上运行,并使用Launch4J包装在exe文件中.
我们想要自定义我们的应用程序进程名称和描述(在Windows的任务管理器中),因为它当前是"javaw.exe"和"Java Platform SE binary"(这对我们的客户来说很困惑).
虽然旧版本的Launch4J可以使用<customProcName>此更改,但此选项现已不存在,因为它不再适用于Win7.
是否有其他(简单)解决方法来自定义我们的应用程序进程名称和描述?
例如,更改javaw.exe可执行文件名似乎是一种方法(因为我们将其嵌入到包装的exe文件中),但是如何指示launch4j jvm文件名更改?
另一个选择可能是创建一个启动器exe文件:可能是一个矫枉过正?
任何想法/提示都非常受欢迎; 谢谢!
我们的应用生成图像.消耗的内存会BufferedImage产生内存不足异常:
java.lang.OutOfMemoryError:Java堆空间
这发生在以下行:
BufferedImage result = new BufferedImage(2540, 2028, BufferedImage.TYPE_INT_ARGB);
Run Code Online (Sandbox Code Playgroud)
在此指令之前检查空闲内存时,它显示我有108MB可用内存.我用来检查内存的方法是:
Runtime rt = Runtime.getRuntime();
rt.gc();
long maxMemory = rt.maxMemory();
long usedMemory = rt.totalMemory() - rt.freeMemory();
long freeMem = maxMemory - usedMemory;
Run Code Online (Sandbox Code Playgroud)
我们不明白它如何BufferedImage消耗超过100MB的内存.它应该使用2540*2028*4字节,大约20 MB.
创建时为什么会消耗这么多内存BufferedImage?我们可以做些什么来减少这种情况?
我们的桌面应用程序(用Java编写并在Windows上运行但未在Windows应用程序商店中注册)需要在用户的Facebook配置文件上发布图像(使用publish_actions权限).
虽然我们的实施工作在测试模式(我们能够在测试用户的个人资料上发布),但我们的申请提交已经被Facebook拒绝并提出以下意见:

我们目前的实施如下:
由于这种方法在审查我们的应用程序提交时被Facebook拒绝(虽然它确实在测试模式下工作),我们尝试了另一种方法:
但不幸的是,这会在加载登录URL时生成以下错误消息:
应用程序配置不允许使用URL:应用程序的设置不允许使用一个或多个给定的URL.它必须与网站URL或Canvas URL匹配,或者域必须是App域之一的子域.
任何帮助或提示都非常受欢迎,因为我们已经被阻止了好几周.谢谢!托马斯
使用Kryo反序列化序列化对象(从文件)时,我得到以下异常:
java.lang.ExceptionInInitializerError
(...)
Caused by: com.esotericsoftware.kryo.KryoException: (...)
Serialization trace: (...)
at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:125)
at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:528)
at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:786)
at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:143)
at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:21)
at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:682)
(...)
Caused by: java.lang.IndexOutOfBoundsException: Index: 1582, Size: 2
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at com.esotericsoftware.kryo.util.MapReferenceResolver.getReadObject(MapReferenceResolver.java:42)
at com.esotericsoftware.kryo.Kryo.readReferenceOrNull(Kryo.java:830)
at com.esotericsoftware.kryo.Kryo.readObjectOrNull(Kryo.java:753)
at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:113)
... 27 more
Run Code Online (Sandbox Code Playgroud)
我的假设是反序列化时(即它改变了)序列化格式没有被正确理解.用于序列化和反序列化的Kryo版本是相同的.在序列化时,java版本可能有所不同:这可能是一个解释吗?
如果没有,关于我生成此类异常的任何其他提示都非常受欢迎!
非常感谢,托马斯
更新:根据建议,特此是从文件反序列化的类
反序列化的主类是HashMap<Integer, PreflopEhsVO>
自定义类定义(子类和父类)是:
public class PreflopEhsVOExtended extends PreflopEhsVO{
private int numbValues = 0;
public synchronized void addValue(PreflopEhsVO values){
if (numbValues == 0) this.valuesPerNumbOpp = values.valuesPerNumbOpp;
else{
//Weighted …Run Code Online (Sandbox Code Playgroud) 我正在使用SwingX JXDatePicker,我无法弄清楚如何提供下一个/上一年的按钮(默认情况下它只提供下一个/上个月的按钮).
此外,似乎不再维护SwingX:我应该使用更新的组件作为日期选择器吗?
任何帮助/提示将不胜感激.谢谢,托马斯
更新:
为了澄清这个问题,我添加了一个JXDatePicker截图,并用红色突出显示下一个/上个月的按钮.问题是:如何添加将日历带到下一年/上一年的按钮?请注意,新按钮需要是标准组件,因为它们需要由特定的Look&Feel管理器(在本例中为Insusbtantial)呈现.
非常感谢

对于Swing来说仍然相对较新,但经过几个小时的搜索,我无法在网上找到答案,因此这篇文章(对不起,如果已经回答,我忽略了它).
我在Swing应用程序中使用JFreeChart.有些图表相对较重(180k数据点),JFreeChart的ChartPanel需要约6秒才能完成第一个paintComponent().
因此,我想在组件绘制时在对话框中显示"请稍候"消息(无需显示SwingWorker的进度).我试图覆盖paintComponent方法,但不幸的是,消息永远不会出现在屏幕上(我想线程直接进入绘制图表,而不花时间绘制对话框).
我的代码看起来像这样:
public class CustomizedChartPanel extends ChartPanel{
private static final long serialVersionUID = 1L;
private JDialog dialog = null;
boolean isPainted = false;
public CustomizedChartPanel(JFreeChart chart) { super(chart); }
@Override
public void paintComponent(Graphics g) {
//At first paint (which can be lengthy for large charts), show "please wait" message
if (! isPainted){
dialog = new JDialog();
dialog.setUndecorated(true);
JPanel panel = new JPanel();
panel.add(new JLabel("Please wait"));
dialog.add(panel);
dialog.pack();
GuiHelper.centerDialog(dialog); //Custom code to center the dialog on the screen
dialog.setVisible(true); …Run Code Online (Sandbox Code Playgroud) 我在散列图(约280万个对象)中存储大量对象(具有存储在对象中的字节数组中的值的唯一组合),并且在检查我是否有任何哈希码冲突时(32位哈希) ),我很惊讶地看到在统计上没有任何东西,我有近100%的机会至少有一次碰撞(参见http://preshing.com/20110504/hash-collision-probabilities/).
因此,我想知道我检测碰撞的方法是否被窃听,或者我是否非常幸运......
以下是我尝试从地图中存储的280万个值中检测碰撞的方法:
HashMap<ShowdownFreqKeysVO, Double> values;
(...fill with 2.8 mlns unique values...)
HashSet<Integer> hashes = new HashSet<>();
for (ShowdownFreqKeysVO key:values.keySet()){
if (hashes.contains(key.hashCode())) throw new RuntimeException("Duplicate hash for:"+key);
hashes.add(key.hashCode());
}
Run Code Online (Sandbox Code Playgroud)
这是对象创建哈希值的方法:
public class ShowdownFreqKeysVO {
//Values for the different parameters
public byte[] values = new byte[12];
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + Arrays.hashCode(values);
return result;
}
@Override
public boolean equals(Object obj) {
if (this …Run Code Online (Sandbox Code Playgroud) 我正在使用Java Scanner对象来解析文本文件.我需要扫描部分文件两次(出于性能原因,我不必暂时存储其内容).
因此,有没有办法将扫描仪"倒回"到特定的文件位置?
或者,有没有办法克隆扫描仪,以便我可以独立使用每个实例(即他们不会移动彼此的文件位置指针)?
非常感谢,托马斯
编辑:
扫描文件一次并直接处理它显然总是可行的,但会在我们现有的代码库中产生显着的额外复杂性,因此需要扫描两次相同的文件部分.
简而言之:该文件包含数千个逻辑项并处理其中的一些,我需要从项目开始存储在项目末尾的信息.
以下行:
ArrayList<ShowdownSingleValueVO> sortedValues = new ArrayList<>();
(...fill the array...)
Collections.sort(sortedValues);
Run Code Online (Sandbox Code Playgroud)
返回以下异常:比较方法违反了其一般合同!
我知道这个异常通常在比较方法未正确实现时生成,但在我的情况下,它的实现非常明显:
public static class ShowdownSingleValueVO implements Comparable<ShowdownSingleValueVO>{
int hashValue;
byte showdownValue;
public ShowdownSingleValueVO(int hashValue, byte showdownValue) {
this.hashValue = hashValue;
this.showdownValue = showdownValue;
}
@Override
public int compareTo(ShowdownSingleValueVO o) {
return this.hashValue - o.hashValue;
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,目标是使值按其hashValue属性排序.
任何关于我做错的想法/暗示都将不胜感激!
谢谢,托马斯
我想替换JOptionPane标题栏中的图标(因为它当前显示默认的Java咖啡徽标).
我尝试了以下方法:
JOptionPane.showMessageDialog(null, "Some Text", "Login",
JOptionPane.INFORMATION_MESSAGE, ImageCacheProvider
.instance.getImageIcon("img/an image.png"));
Run Code Online (Sandbox Code Playgroud)
它取代了窗口中的图标,但不替换标题栏中的图标:

是否有任何方法可以更改标题栏中的图标,或者隐藏默认的Java图标而无需实现JDialog类?
谢谢你!托马斯
我正在尝试在图像上创建阴影效果(使用java).
我已经看到了多个相关的问题,我已经实现了几个建议的解决方案.不幸的是我总是遇到同样的问题:阴影效果以灰色重新绘制整个图像(即阴影颜色) - 因此原始图像不再可见.
我测试的代码示例(基于JIDE免费可用库):
ShadowFactory sf = new ShadowFactory(2, 0.5f, Color.black);
ImageIO.write(sf.createShadow(ImageIO.read(new File("c:\\out2.png"))), "png", new File("c:\\out3.png"));
Run Code Online (Sandbox Code Playgroud)
不需要说我用多个源文件(out2.png)测试了这个.
我很无能为力:任何暗示/帮助都会受到高度赞赏.
如果该软件已经安装了旧版本,我需要 Inno Setup 生成的安装程序来删除安装前的某些文件。
我尝试通过比较版本号(下面的自定义函数)来做到这一点,但是在编译时,Inno Setup 会生成错误:
[ISPP] 未声明的标识符:“GetInstalledVersion”。
Inno Setup 脚本相关摘录为:
(...)
[Code]
function GetInstalledVersion(MandatoryButNotUsedParam: String): String;
var Version: String;
begin
if RegValueExists(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+ExpandConstant('AppId')+'_is1', 'DisplayVersion') then
begin
RegQueryStringValue(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+ExpandConstant('AppId')+'_is1', 'DisplayVersion', Version);
MsgBox(ExpandConstant('Existing version:'+Version+' New version:'+ExpandConstant('AppVersion')), mbInformation, MB_OK);
Result := Version;
end
else
begin
Result := '';
end
end;
(...)
[InstallDelete]
#define InstalledAppVersion GetInstalledVersion('')
#if "1.013" > InstalledAppVersion
Type: files; Name: {userappdata}\xxx\*.hhd
#endif
Run Code Online (Sandbox Code Playgroud)
作为 Inno Setup 的新手,这当然是一个微不足道的问题,但在论坛上找不到答案。因此,问题是:如何GetInstalledVersion从该[InstallDelete]部分正确调用该函数?
是否存在问题,因为在读取节[InstallDelete]之前可能会调用节?[code]
非常感谢您的帮助/提示!
java ×10
swing ×5
exception ×1
facebook ×1
hash ×1
hashcode ×1
image ×1
inno-setup ×1
jfreechart ×1
joptionpane ×1
kryo ×1
memory ×1
mongodb ×1
parsing ×1
pascalscript ×1
php ×1
swingx ×1
windows ×1