小编Tom*_*Tom的帖子

PHP MongoDB:致命错误:找不到类'MongoClient'

执行以下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 清楚地显示驱动程序已加载:

在此输入图像描述

但我仍然收到同样的致命错误.

php mongodb

19
推荐指数
1
解决办法
5万
查看次数

在Windows上设置Java进程名称

我们的Java Swing应用程序在Windows上运行,并使用Launch4J包装在exe文件中.

我们想要自定义我们的应用程序进程名称和描述(在Windows的任务管理器中),因为它当前是"javaw.exe""Java Platform SE binary"(这对我们的客户来说很困惑).

虽然旧版本的Launch4J可以使用<customProcName>此更改,但此选项现已不存在,因为它不再适用于Win7.

是否有其他(简单)解决方法来自定义我们的应用程序进程名称和描述?

例如,更改javaw.exe可执行文件名似乎是一种方法(因为我们将其嵌入到包装的exe文件中),但是如何指示launch4j jvm文件名更改?

另一个选择可能是创建一个启动器exe文件:可能是一个矫枉过正?

任何想法/提示都非常受欢迎; 谢谢!

java windows swing

17
推荐指数
2
解决办法
5696
查看次数

Java BufferedImage内存消耗

我们的应用生成图像.消耗的内存会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 memory garbage-collection bufferedimage

6
推荐指数
1
解决办法
2075
查看次数

Facebook登录桌面应用程序

我们的桌面应用程序(用Java编写并在Windows上运行但未在Windows应用程序商店中注册)需要在用户的Facebook配置文件上发布图像(使用publish_actions权限).

虽然我们的实施工作在测试模式(我们能够在测试用户的个人资料上发布),但我们的申请提交已经被Facebook拒绝并提出以下意见:

在此输入图像描述

我们目前的实施如下:

  • 我们正在使用"手动登录流程"(如下所述:https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow/v2.2),基于以下内容应用网页浏览器
  • 我们使用的登录网址是:https://www.facebook.com/dialog/oauth? client_id=xxx & redirect_uri = www.mydomain.com/login_successful.html & response_type = token & scope = publish_actions(其中mydomain.com是我们的实际网站,xxx是我们的应用程序ID)
  • 在我们的应用程序配置(http://developers.facebook.com)上,我们已将"网站"指示为平台(因为所有其他人都需要应用程序商店应用程序ID),并且已将我们的网站域名作为站点URL提供(将移动站点URL保持为空)
  • 我们还在应用程序的高级配置中指出它是"本机或桌面应用程序",并且"嵌入了App Secret"

由于这种方法在审查我们的应用程序提交时被Facebook拒绝(虽然它确实在测试模式下工作),我们尝试了另一种方法:

但不幸的是,这会在加载登录URL时生成以下错误消息:

应用程序配置不允许使用URL:应用程序的设置不允许使用一个或多个给定的URL.它必须与网站URL或Canvas URL匹配,或者域必须是App域之一的子域.

任何帮助或提示都非常受欢迎,因为我们已经被阻止了好几周.谢谢!托马斯

facebook facebook-graph-api facebook-oauth

6
推荐指数
1
解决办法
3387
查看次数

Kryo序列化依赖于Java版本?

使用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)

java serialization kryo

6
推荐指数
1
解决办法
1627
查看次数

Java Swing JXDatePicker

我正在使用SwingX JXDatePicker,我无法弄清楚如何提供下一个/上一年的按钮(默认情况下它只提供下一个/上个月的按钮).

此外,似乎不再维护SwingX:我应该使用更新的组件作为日期选择器吗?

任何帮助/提示将不胜感激.谢谢,托马斯

更新:

为了澄清这个问题,我添加了一个JXDatePicker截图,并用红色突出显示下一个/上个月的按钮.问题是:如何添加将日历带到下一年/上一年的按钮?请注意,新按钮需要是标准组件,因为它们需要由特定的Look&Feel管理器(在本例中为Insusbtantial)呈现.

非常感谢

在此输入图像描述

java swing swingx

5
推荐指数
2
解决办法
2万
查看次数

如何在组件绘制时创建"请等待"Swing对话框

对于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)

java swing jfreechart

4
推荐指数
1
解决办法
2万
查看次数

Java哈希冲突概率

我在散列图(约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 hash hashcode hash-collision

4
推荐指数
1
解决办法
5157
查看次数

Java Scanner"倒带"

我正在使用Java Scanner对象来解析文本文件.我需要扫描部分文件两次(出于性能原因,我不必暂时存储其内容).

因此,有没有办法将扫描仪"倒回"到特定的文件位置?

或者,有没有办法克隆扫描仪,以便我可以独立使用每个实例(即他们不会移动彼此的文件位置指针)?

非常感谢,托马斯

编辑:

扫描文件一次并直接处理它显然总是可行的,但会在我们现有的代码库中产生显着的额外复杂性,因此需要扫描两次相同的文件部分.

简而言之:该文件包含数千个逻辑项并处理其中的一些,我需要从项目开始存储在项目末尾的信息.

java parsing

3
推荐指数
1
解决办法
3563
查看次数

Java sort抛出java.lang.IllegalArgumentException:比较方法违反了其一般合同

以下行:

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属性排序.

任何关于我做错的想法/暗示都将不胜感激!

谢谢,托马斯

java exception

3
推荐指数
1
解决办法
238
查看次数

JOptionPane标题栏图标

我想替换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 swing joptionpane

3
推荐指数
1
解决办法
2197
查看次数

Java:在图像上创建阴影效果

我正在尝试在图像上创建阴影效果(使用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)测试了这个.

我很无能为力:任何暗示/帮助都会受到高度赞赏.

java swing image

2
推荐指数
1
解决办法
5766
查看次数

Inno Setup:如何从 InstallDelete 部分调用自定义函数

如果该软件已经安装了旧版本,我需要 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]

非常感谢您的帮助/提示!

inno-setup pascalscript

0
推荐指数
1
解决办法
3997
查看次数